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