官方文档:
https://dev.mysql.com/doc/refman/5.7/en/replication.html
第一步:设置主库
修改mysql配置,添加:
[mysqld]
log-bin=mysql-bin
server-id=1 //只能是正整数
重启mysql服务
查看主服务器状态:
show master status\G
第二步:开同步账号
CREATE USER 'repl'@'%.example.com' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%.example.com';
FLUSH PRIVILEGES;
第三步:导出主库备份
mysqldump -uroot -proot --master-data=2 test_db > /root/test_db.sql
master-data参数:
导出主库当前的MASTER_LOG_FILE和MASTER_LOG_POS信息,2表示写在注释中
第四步:设置从库
[mysqld]
server-id=2 //唯一的ID
重启mysql服务
导入主库备份
USE test_db;
SOURCE /root/test_db.sql;
设置master配置
CHANGE MASTER TO
MASTER_HOST='master_host_name', //主库host
MASTER_USER='replication_user_name', //上面创建的同步账号
MASTER_PASSWORD='replication_password',
MASTER_LOG_FILE='recorded_log_file_name', //mysqldump导出的文件中的MASTER_LOG_FILE信息
MASTER_LOG_POS=recorded_log_position; //mysqldump导出的文件中的MASTER_LOG_POS信息`
开启slave
start slave;
查看slave状态
show slave status\G;
如果
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
两项都是yes则代表OK了
排错:
Slave_IO_Running:no
一般是主库配置不对,检查host和账号密码,账号是否有权限
Slave_SQL_Running: no
slave status的Last_SQL_Errno有报错信息
先停止slave:stop slave;
运行SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
start slave;
查看是否还有报错信息,有就再执行一遍SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;直到没有报错为止;
SQL_SLAVE_SKIP_COUNTER这个命令有待研究,执行前要看一下sql报错信息是否允许跳过;
实在不行就重新导出一份主库,把从库删了重新来一遍;
网友评论