設備: 服務器A 10.1.1.7 服務器B 10.1.1.8mysql
OS:CentOS 7.3linux
目標:兩臺服務器主主同步,實現高可用,sql
wget~tar~mv~useradd~mkdir~scripts/~cp support x2~vim~chkconfig~start數據庫
systemctl stop firewalld systemctl disable firewalld
A:vim
vim /etc/my.cnf ~ [mysqld] server-id = 1 auto_increment_offset = 1 auto_increment_increment = 2 log-bin=mysql-bin log-slave-updates
B:bash
vim /etc/my.cnf ~ [mysqld] server-id = 2 auto_increment_offset = 2 auto_increment_increment = 2 log-bin=mysql-bin log-slave-updates
注: server-id 不能同樣,能夠考慮改成IP末位服務器
auto_increment_offset 爲(主鍵)起始值,兩臺設備主鍵相同會致使主主斷裂,須要錯開ide
auto_increment_increment 爲(主鍵)增加值,由於起始值已經錯開,增長的值爲錯開值便可保證不會衝突。wordpress
舉個例子:四臺設備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 event Master_Host: 10.1.1.7 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000007 Read_Master_Log_Pos: 106 Relay_Log_File: axiang-02-relay-bin.000002 Relay_Log_Pos: 251 Relay_Master_Log_File: mysql-bin.000007 Slave_IO_Running: Yes Slave_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 event Master_Host: 10.1.1.8 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000009 Read_Master_Log_Pos: 622 Relay_Log_File: axiang-01-relay-bin.000002 Relay_Log_Pos: 331 Relay_Master_Log_File: mysql-bin.000009 Slave_IO_Running: Yes Slave_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:
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 event Master_Host: 10.1.1.7 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000008 Read_Master_Log_Pos: 945 Relay_Log_File: axiang-02-relay-bin.000002 Relay_Log_Pos: 251 Relay_Master_Log_File: mysql-bin.000008 Slave_IO_Running: Yes Slave_SQL_Running: Yes ~