参考https://blog.51cto.com/369369/790921 1、主从服务器分别作以下操作: 1.1、版本一致 1.2、初始化表,并在后台启动mysql 1.3、修改root的密码 2、修改主服务器master: #vi /etc/my.cnf ``` [mysqld] log-bin=mysql-bin //[必须]启用二进制日志 server-id=222 //[必须]服务器唯一ID,默认是1,一般取IP最后一段 binlog-do-db=xxxx 二进制日志记录的数据库 binlog-ignore-db=xxxx 二进制日志中忽略数据库 以上任意指定其中一行参数就行,如果需要忽略多个库,则添加多行 ``` 3、修改从服务器slave: #vi /etc/my.cnf ``` [mysqld] log-bin=mysql-bin //[不是必须]启用二进制日志 server-id=226 //[必须]服务器唯一ID,默认是1,一般取IP最后一段 replicate-do-db 设定需要复制的数据库 replicate-ignore-db 设定需要忽略的复制数据库 replicate-do-table 设定需要复制的表 replicate-ignore-table 设定需要忽略的复制表 replicate-wild-do-table 同replication-do-table功能一样,但是可以通配符 replicate-wild-ignore-table 同replication-ignore-table功能一样,但是可以加通配符 ``` 4、重启两台服务器的mysql service mysqld restart 5、在主服务器上建立帐户并授权slave: # 创建用于从库复制的账号rep ``` mysql> grant replication slave on *.* to 'rep'@'192.168.0.%' identified by '123456'; ``` # 刷新权限 ``` mysql> flush privileges; ``` ·replication slave为mysql同步的必须权限,此处不要设置为all。 ·*.*表示所有库的所有表,也可以指定具体的库和表(db.table)。 ·'rep'@'192.168.0.%'为同步账号。 ·注意此账号会有权限不足的问题 ·报错:ERROR 1819 (HY000): Your password does not satisfy the current policy requirements ·修改mysql密码策略使其能配置简单密码 ·https://blog.csdn.net/u013449046/article/details/106455041/ 6、登录主服务器的mysql,查询master的状态 mysql>show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000004 | 308 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec) 注:执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化 7、配置从服务器Slave: ``` mysql>change master to master_host='192.168.175.132',master_user='rep',master_password='123456',master_port=3306,master_log_file='master-bin.000004',master_log_pos=308; ``` · Mysql>start slave; //启动从服务器复制功能 8、检查从服务器复制功能状态: mysql> show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.2.222 //主服务器地址 Master_User: mysync //授权帐户名,尽量避免使用root Master_Port: 3306 //数据库端口,部分版本没有此行 Connect_Retry: 60 Master_Log_File: mysql-bin.000004 Read_Master_Log_Pos: 600 //#同步读取二进制日志的位置,大于等于Exec_Master_Log_Pos Relay_Log_File: ddte-relay-bin.000003 Relay_Log_Pos: 251 Relay_Master_Log_File: mysql-bin.000004 Slave_IO_Running: Yes //此状态必须YES Slave_SQL_Running: Yes //此状态必须YES 注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。 如果调试错误,尝试重新连接 mysql>stop slave; 停止 mysql>reset slave;去除主从关系 mysql>start slave; 启动从服务器 此处如果出现提示错误 Slave_IO_Error 从库修改连接的主库 在从库B上执行: ``` mysql>stop slave; 停止从库 mysql>reset slave; 重置从库 mysql>change master to master_host = 'VMS00782', master_user = 'replication', master_password = 'ReplPass@123456', master_port = 3306, master_log_file = 'VMS00782-bin.000001', master_log_pos = 120; 重新配置连接主库信息 mysql>start slave; mysql>show slave status; ``` 9、主从服务器测试:主数据库执行新增修改删除,查看从数据库是否同步更新数据 略·· 10、完成: 编写一shell脚本,用nagios监控slave的两个yes(Slave_IO及Slave_SQL进程),如发现只有一个或零个yes,就表明主从有问题了,发短信警报吧。 shell脚本参考: #!/bin/bash |@|port=`netstat -anl|grep 3306 |sed -n '1p' |awk '{print $4}'|awk -F: '{ print $2}'` |@|array=($(mysql -uroot -p123 -e "show slave status\G"|grep "Running" |awk '{print $2}')) |@|if ["$port" == "3306"] |@|then |@| if [ "${array[0]}" == "Yes" ] || [ "${array[1]}" == "Yes" ] |@| then |@| echo "slave is OK" |@| |@| echo "slave is error" |@| fi |@|fi |@|