环境:mysql5.7
一、主库配置
开启二进制日志服务
-
新建日志文件夹
mkdir -p /var/log/mysql-bin//给mysql授权chown -R mysql:mysql /var/log/mysql-bin
-
开启二进制日志
//打开mysql配置文件my.cnfvi /etc/my.cnf //可能由于mysql安装的方式不同配置文件的目录有所不同//在[mysqld]字段下增加以下内容server-id=1 //数据库的server-id 不能和从库相同log-bin=/var/log/mysql-binmysql-bin.log //日志路径binlog_do_db=dbname //开启二进制的数据库binlog_ignore_db=mysql //不启动二进制日志的数据库
新建备份用户
链接数据库后执行以下sql语句
grant replication slave on *.* to 'mysql_backup'@'%' identified by 'password';flush privileges;
从库配置
配置server-id
//首先查询是否有server-idshow variables like '%server_id%';如没有server-id且不是rds//修改my.cnf文件,在[mysqld]字段下增加server-id=2 //不能与主库相同没有server-id且是rds(该方法重启后失效,需重新设置server-id)//执行sqlset global server_id=2;
配置从库同步
-
备份主库数据
需要在主库不会再改变数据的情况下进行操作(建议锁表)
将备份的主库数据导入从库
同时在主库执行show master status ;
记录File和Position字段
-
配置同步设置
//从库添加主库同步信息change master to master_host='主库ip或者域名', master_port=3306, master_user='mysql_backup', master_password='password', master_log_file='日志文件', master_log_pos=111111;
-
启动从库备份
start slave ;
//查看备份状态show slave status ;Slave_SQL_Runing 和 Slave_IO_Runing都为YES即代表配置完成
特殊情况处理
Slave_SQL_Runing为no
-
程序可能在slave上进行了写操作
-
也可能是slave机器重起后,事务回滚造成的.
一般是事务回滚造成的:
解决办法:
mysql> stop slave ;mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;mysql> start slave ;
Slave_IO_Runing为no
-
分别查看主从服务器:
show master status;//主show slave status ;//从
-
发现Master_Log_File没有对应。
-
出现Slave_IO_Running: No的机器上操作
slave stop; CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000026', MASTER_LOG_POS=0; slave start; show slave status\G