1. 程式人生 > >mysql--主從(雙主)簡單配置

mysql--主從(雙主)簡單配置

1.主伺服器 172.16.20.228
備份 mysqldump -uroot -p123 --all-databases > /bak/all.sql
將全備拷貝到從機,並且從機恢復資料 scp [email protected]:/bak/all.mysql /bak/mysql //在從伺服器中cp主伺服器的all.sql檔案
在從伺服器172.16.20.233 // 回覆資料(mysql -uroot -p123 < /bak/all.sql)

2.在配置檔案 /etc/my.cnf 中 mysqld 下 加一句 log-bin
server-id=1
mysqld --user=mysql --log-error=/tmp/mysql.log --log-bin --server-id=1 //開啟二進位制日誌

開啟binlog日誌
vim /etc/my.cnf
[mysqld]
log-bin=master
log-bin-index=master
server-id=1

3.授權B伺服器 可以傳輸binlog日誌
grant replication slave on *.* to [email protected]'172.16.20.233' identified by '123';

從伺服器
B ip 172.16.20.233
1.測試slave是否能正常連結
mysql -u slave -p123 -h 172.16.20.228

2.拷貝A伺服器的全備,並且恢復
scp 172.16.20.228:/bak/all.sql /bak/all.sql
mysql -u root -p123 < /root/all.sql

3.配置A伺服器連線地址及使用者資訊
vim /etc/my.cnf
[mysqld]
server-id=2
4.
mysql> flush logs;
Query OK, 0 rows affected (0.08 sec)

mysql> show master status\G;
*************************** 1. row ***************************
File: localhost-bin.000004
Position: 154
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)

ERROR:
No query specified

在主伺服器 show master status\G;

登入從伺服器 mysql -uroot -p123
stop slave;
change master to master_host='172.16.20.228',master_user='slave',master_password='123',master_port=3306, master_log_file='localhost-bin.000004',master_log_pos=154;
此處為主伺服器show master status 內的內容

start slave;
5. show slave status\G

Relay_Master_Log_File: localhost-bin.000004
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

主伺服器做出資料改動 檢視從伺服器是否有同步的變化

===============================================
mysqlbinlog --no-defaults mysql-bin.000002 //看 log-bin 日誌
================================================

主從注意事項

在master上提交事務後,並且寫入binlog,返回事務成功標記;
將binlog傳送到slave,轉儲成relay log;
在slave上再將relay log讀取出來應用。
步驟1和步驟3之間是非同步進行的,無需等待確認各自的狀態,所以說MySQL replication是非同步的。
MySQL semi-sync replication在之前的基礎上做了加強完善
=============================================================================
有的時候主從同步有問題了以後,需要從log位置的下一個位置進行同步,相當於跳過那個錯誤,這時候也可以使用CHANGE MASTER命令來處理,只要找到對應的LOG位置就可以,比如:
CHANGE MASTER TO MASTER_HOST='10.1.1.75',MASTER_USER='replication',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=106;
START SLAVE;
==================================================================

MYSQL主從同步的管理經驗介紹
1. 不要亂使用SQL_SLAVE_SKIP_COUNTER命令。

這個命令跳過之後很可能會導致你的主從資料不一致,一定要先將指定的錯誤記錄下來,然後再去檢查資料是否一致,尤其是核心的業務資料。
2. 結合percona-toolkit工具pt-table-checksum定期檢視資料是否一致。
這個是DBA必須要定期做的事情,呵呵,有合適的工具何樂而不為呢?另外percona-toolkit還提供了對資料庫不一致的解決方案,可以採用pt-table-sync,這個工具不會更改主的資料。還可以使用pt-heartbeat來檢視從伺服器的複製落後情況。
3. 使用replicate-wild-ignore-table選項而不要使用replicate-do-db或者replicate-ignore-db。
原因已經在上面做了說明。
4. 將主伺服器的日誌模式調整成mixed
5. 每個表都加上主鍵,主鍵對資料庫的同步會有影響尤其是居於ROW複製模式。