14-4-5 17 MySQL 主主同步
生活随笔
收集整理的這篇文章主要介紹了
14-4-5 17 MySQL 主主同步
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2019獨角獸企業重金招聘Python工程師標準>>>
MySQL 主主同步
準備工作
設備: 服務器A 10.1.1.7 服務器B 10.1.1.8
OS:CentOS 7.3
目標:兩臺服務器主主同步,實現高可用,
安裝MySQL 5.1綠色版:
wget~tar~mv~useradd~mkdir~scripts/~cp support x2~vim~chkconfig~start
配置主主同步
關防火墻
systemctl stop firewalld systemctl disable firewalld調整my.cnf配置
A:
vim /etc/my.cnf ~ [mysqld] server-id = 1 auto_increment_offset = 1 auto_increment_increment = 2log-bin=mysql-bin log-slave-updatesB:
vim /etc/my.cnf ~ [mysqld] server-id = 2 auto_increment_offset = 2 auto_increment_increment = 2log-bin=mysql-bin log-slave-updates注: server-id 不能一樣,可以考慮改為IP末位
auto_increment_offset 為(主鍵)起始值,兩臺設備主鍵相同會導致主主斷裂,需要錯開
auto_increment_increment 為(主鍵)增長值,因為起始值已經錯開,增加的值為錯開值即可保證不會沖突。
舉個例子:四臺設備a,b,c,d的主鍵起始值分別為1,2,3,4。增長值為4。a主鍵則會以1,5,9,13...增長,b主鍵會以2,6,10,14...增長,c主鍵以3,7,11,15增長,d我懶得寫了。反正結果是不會出現主鍵沖突。兩臺設備則呈現主鍵奇偶增長。
調整數據庫
將mysql命令加入PATH
echo "PATH=$PATH:/usr/local/mysql/bin/" >> .bash_profile source !$A上操作:A給B開戶,查看A主信息
mysql -uroot mysql> grant replication slave on *.* to 'repl'@'10.1.1.8' identified by 'axianglinux'; mysql> flush privileges; mysql> show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000007 | 106 | | | +------------------+----------+--------------+------------------+B上操作:B從A
mysql> change master to master_host='10.1.1.7',master_port=3306,master_user='repl',master_password='axianglinux',master_log_file='mysql-bin.000007',master_log_pos=106; mysql> start slave; mysql> show slave status\G; *************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 10.1.1.7Master_User: replMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000007Read_Master_Log_Pos: 106Relay_Log_File: axiang-02-relay-bin.000002Relay_Log_Pos: 251Relay_Master_Log_File: mysql-bin.000007Slave_IO_Running: YesSlave_SQL_Running: Yes ~反著再來一遍 B上操作:B給A開戶,查看B主信息
grant replication slave on *.* to 'repl'@'10.1.1.7' identified by 'axianglinux' flush privileges; show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000009 | 462 | | | +------------------+----------+--------------+------------------+A上操作:A從B
change master to master_host='10.1.1.8',master_port=3306,master_user='repl',master_password='axianglinux',master_log_file='mysql-bin.000009',master_log_pos=462; start slave; show slave status\G *************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 10.1.1.8Master_User: replMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000009Read_Master_Log_Pos: 622Relay_Log_File: axiang-01-relay-bin.000002Relay_Log_Pos: 331Relay_Master_Log_File: mysql-bin.000009Slave_IO_Running: YesSlave_SQL_Running: Yes ~測試
A:
mysql> grant all on *.* to 'usera'@'127.0.0.1';mysql> create database dbusera;B:
mysql> select user,host,password from mysql.user; +-------+-----------+-------------------------------------------+ | user | host | password | +-------+-----------+-------------------------------------------+ | root | localhost | | | root | axiang-02 | | | root | 127.0.0.1 | | | | localhost | | | | axiang-02 | | | repl | 10.1.1.7 | *8E1A3402D66F8DDD8D9D19596B706C6D238C0F34 | | usera | 127.0.0.1 | | +-------+-----------+-------------------------------------------+ 7 rows in set (0.01 sec)mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | dbusera | | mysql | | test | +--------------------+ 4 rows in set (0.01 sec)mysql> create database dbuserb-> ; Query OK, 1 row affected (0.00 sec)A:
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | dbusera | | dbuserb | | mysql | | test | | wordpress | +--------------------+- 因為A上有wordpress庫,B沒有,對wordPress的操作會導致B從A斷裂
恢復
A:
mysql> show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000008 | 945 | | | +------------------+----------+--------------+------------------+B:
mysql> stop slave-> ; Query OK, 0 rows affected (0.02 sec)mysql> change master to master_host='10.1.1.7',master_port=3306,master_user='repl',master_password='axianglinux',master_log_file='mysql-bin.000008',master_log_pos=945; Query OK, 0 rows affected (0.01 sec)mysql> start slave; Query OK, 0 rows affected (0.02 sec)mysql> show slave status\G *************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 10.1.1.7Master_User: replMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000008Read_Master_Log_Pos: 945Relay_Log_File: axiang-02-relay-bin.000002Relay_Log_Pos: 251Relay_Master_Log_File: mysql-bin.000008Slave_IO_Running: YesSlave_SQL_Running: Yes ~- 以上實驗追求簡單,實際生產環境有寫入的情況需先備份數據
- mysqldump備份需要鎖表,innobackup貌似不用
- 從的logbin內的Pos點可以斷點續傳。后面主從邏輯不出錯則可以從舊Pos開啟
轉載于:https://my.oschina.net/u/3579690/blog/1572420
總結
以上是生活随笔為你收集整理的14-4-5 17 MySQL 主主同步的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用Powershell来修改Hyper
- 下一篇: 部署 Communicator Web