一,配置主库 master
1,配置my.cnf,并重启 master 数据库
# 唯一标志ID server-id=1 # master 数据操作记录的二进制日志,提供给 slave 读取 log-bin=/var/lib/mysql/log/bin # master 指定同步的数据库 binlog_do_db=test
重启 mysql
[mysql@VLR-123-177-206 ~]# service mysql restart
2,在 master 上创建 slave 用户,提供给 slave 登录来同步数据
mysql>create user slave_server; //slave_server SLAVE权限,除此之外没有必要添加不必要的权限,密码为 slave_passwd。 // 这里%是通配符,表示10.123.189.0-10.123.189.255的从服务器都能以 slave_server 用户登陆主服务器。当然你也可以指定固定Ip。 mysql>GRANT REPLICATION SLAVE ON *.* TO 'slave_server'@'10.123.189.%' IDENTIFIED BY 'slave_passwd';
3,导出 master 中 test 数据库的原始数据
暂时把 test 表锁住,保证导出的数据一致性
mysql>use test; mysql>FLUSH TABLES WITH READ LOCK;
执行数据导出
[mysql@VLR-123-177-206 ~]# mysqldump -u root -p --opt test > ~/test.sql
4,查看 master 当前数据操作记录的文件和起始点,后面配置 slave 会用到这些信息
mysql> show master status; +------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------+----------+--------------+------------------+ | bin.000001 | 107 | test | | +------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
这个时候可以释放 test 表格了
mysql>use test; mysql>UNLOCK TABLES;
二,配置从数据库 slave
1,导入 master 数据库的原始数据到 slave 数据库
[mysql@VLR-123-189-150 ~]# mysql -u root -p test < ~/test.sql
2,配置my.cnf,并重启 slave 数据库
# 唯一标志ID server-id=2 # slave 获取 master 数据的记录 relay-log=/var/lib/mysql/relay/log
重启 mysql
[mysql@VLR-123-189-150 ~]# service mysql restart
3,slave 指定 master 的同步信息
// 包括 master 的host,port,user,password // 以及 master 数据操作记录的二进制文件名log_file和起始点log_pos,对应master上面show master status内容的File和Position mysql> CHANGE MASTER TO MASTER_HOST='10.123.177.206',MASTER_USER='slave_server', MASTER_PASSWORD='slave_passwd', MASTER_LOG_POS=3306,master_log_file='bin.000001', master_log_pos=107; Query OK, 0 rows affected (0.05 sec)
4,开启 slave 同步,并查看状态,如果有Waiting for master to send event表示成功了
mysql> START SLAVE; Query OK, 0 rows affected (0.01 sec) mysql> show slave status; +----------------------------------+----------------+--------------+-------------+---------------+-----------------+---------------------+ | Slave_IO_State | Master_Host | Master_User | Master_Port | Connect_Retry | Master_Log_File | Read_Master_Log_Pos | +----------------------------------+----------------+--------------+-------------+---------------+-----------------+---------------------+ | Waiting for master to send event | 10.123.177.206 | slave_server | 3306 | 60 | bin.000001 | 107 | +----------------------------------+----------------+--------------+-------------+---------------+-----------------+---------------------+ 1 row in set (0.00 sec)
三,遇到的一些问题
1,错误提示:
unknown variable 'master-host=10.123.177.206'
解决方法:
mysql5之后,slave在my.cnf配置master信息的参数已经被移除,只能在mysql命令行下通过 change master命令来配置了
2,错误提示:
Got fatal error 1236 from master when reading data from binary log: 'Client requested master to start replication from impossible position; the first event '' at 3306, the last event read from '/var/lib/mysql/log/bin.000001' at 4, the last byte read from '/var/lib/mysql/log/bin.000001' at 4.'
解决方法:
这是slave查看同步状态时Last_IO_Error的报错,有可能是master数据库操作记录的二进制日志文件master_log_file没有指定,或者是日志文件的起始点master_log_pos出错了,重新配置这两个参数即可
mysql>stop slave; msyql>change master to master_log_file='bin.000001', master_log_pos=107; mysql>start slave;
Leave a Reply