14-4-5 17 MySQL 主主同步

MySQL 主主同步

準備工做

設備: 服務器A 10.1.1.7 服務器B 10.1.1.8mysql

OS:CentOS 7.3linux

目標:兩臺服務器主主同步,實現高可用,sql

安裝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

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上有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 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
~
  • 以上實驗追求簡單,實際生產環境有寫入的狀況需先備份數據
  • mysqldump備份須要鎖表,innobackup貌似不用
  • 從的logbin內的Pos點能夠斷點續傳。後面主從邏輯不出錯則能夠從舊Pos開啓
相關文章
相關標籤/搜索