参考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
|@|