MYSQL AB複製

                                Myslq AB複製

做AB複製之前前提時兩邊的數據必須一樣,Mysql複製默認的是異步複製,master將事物事件寫入binlog,但不知道slave何時接受且已接受,在異步複製的機制的情況下,如果master宕機,事務在master上已提交,但很可能這些事物沒有傳到任何slave上。此時salve有可能丟失事務。

官方半同步的複製的概念:

當slave主機連接到master時。能夠查看是否處於半同步複製的機制。

當master上開啓半同步複製的功能時,至少應該有一個slave開啓其功能。

3  .當一個事務的事件都已寫入其relay-log中且已刷新到磁盤上,Slave纔會告知已收到

同步複製:Master提交事務,直到事務在所有的Slave都已提交,此時纔會返回客戶端,事務執行完畢。缺點:完成一個事務可能會有很大的延遲。

異步複製:當Slave準備好纔會向Master請求binlog。缺點:不能保證一些事件都能夠被所有的Slave所接收。

半同步複製:半同步複製工作的機制處於同步和異步之間,Master的事務提交阻塞,只要一個Slave已收到該事務的事件且已記錄。它不會等待所有的Slave都告知已收到,且它只是接收,並不用等其完全執行且提交

實驗 server2 :master

     Server3 :slave

mysql-5.1.71版本

[root@server2 ~]# yum install mysql-server -y

[root@server3~]# yum install mysql-server -y

[root@server2 ~]# /etc/init.d/mysqld start

[root@server2 ~]# vim /etc/my.cnf

在[mysqld]添加以下參數

8 log-bin=mysql-bin     啓動二進制日誌

9 binlog-do-db=westos  二進制日誌同步的數據庫名稱

10 server-id=1         必須是1到2^32-1之間的一個正整數數

[root@server2 ~]# /etc/init.d/mysqld restart         在重啓服務的過程中如果失敗,要去/var/log/mysql.log查看原因,一般來說都是上面修改的配置文件錯了,如果不是在看其他原因,時在不行據刪除/var/lib/mysql 裏面的文件,然後初始化重啓。

[root@server2 mysql]# mysql_secure_installation 修改密碼

[root@server2 mysql]# mysql -pwestos

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 11

Server version: 5.1.71-log Source distribution

 

Copyright (c) 2000, 2013, Oracle and/or its affiliates. Allrights reserved.

 

Oracle is a registered trademark of Oracle Corporation and/orits

affiliates. Other names may be trademarks of their respective

owners.

 

Type 'help;' or '\h' for help. Type '\c' to clear the currentinput statement.

 

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql              |

+--------------------+

2 rows in set (0.00 sec)

 

mysql> create database weCtrl-C -- exit!

Aborted

[root@server2 mysql]# mysql -pwestos

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 12

Server version: 5.1.71-log Source distribution

 

Copyright (c) 2000, 2013, Oracle and/or its affiliates. Allrights reserved.

 

Oracle is a registered trademark of Oracle Corporation and/orits

affiliates. Other names may be trademarks of their respective

owners.

 

Type 'help;' or '\h' for help. Type '\c' to clear the currentinput statement.

 

mysql> show master status; 查看master狀態

+------------------+----------+--------------+------------------+

| File             |Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000001 |     737 | westos       |                  |

+------------------+----------+--------------+------------------+

1 row in set (0.00 sec)

 

mysql> create database westos;  創建一個共享的庫

Query OK, 1 row affected (0.00 sec)

 

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql              |

| westos             |

+--------------------+

3 rows in set (0.00 sec)

 

mysql> grant replication slave on *.* tolinux@'172.25.137.3'identified by 'redhat';

Query OK, 0 rows affected (0.00 sec)  授權個slave

 

mysql> Bye

裏面有mysql-bin.00000x二進制文件,記錄的是堆數據庫所有的操作,在對數據庫進行備份的時候要用到這個文件。



wKioL1eiEtnxTyk0AAA_TEcY5Fs744.png

[root@server2 mysql]# mysqlbinlog mysql-bin.000001  通過mysqlbinglog 來查看裏面的內容。

[root@server3 ~]# vim /etc/my.cnf

8 server-id=2

[root@server3 ~]# /etc/init.d/mysqld restart

[root@server3 ~]# mysql

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 2

Server version: 5.1.71 Source distribution

 

Copyright (c) 2000, 2013, Oracle and/or its affiliates. Allrights reserved.

 

Oracle is a registered trademark of Oracle Corporation and/orits

affiliates. Other names may be trademarks of their respective

owners.

 

Type 'help;' or '\h' for help. Type '\c' to clear the currentinput statement.

 

mysql> show

    -> ;

ERROR 1064 (42000): You have an error in your SQL syntax; checkthe manual that corresponds to your MySQL server version for the right syntaxto use near '' at line 1

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql              |

| test               |

+--------------------+

3 rows in set (0.00 sec)

 

mysql> create database westos;

Query OK, 1 row affected (0.00 sec)

 

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql              |

| test               |

| westos             |

+--------------------+

4 rows in set (0.00 sec)

 

mysql> show slave stauts;

ERROR 1064 (42000): You have an error in your SQL syntax; checkthe manual that corresponds to your MySQL server version for the right syntaxto use near 'stauts' at line 1

mysql> show slave status;

Empty set (0.00 sec)

mysql> change master tomaster_host='172.25.137.2',master_user='linux',master_password='redhat',master_log_file='mysql-bin.000001',master_log_pos=975;

Query OK, 0 rows affected (0.81 sec)

mysql> start slave;

Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G;     Slave_IO_Running,Slave_SQL_Running: 這兩個的狀態都是yes說明狀態良好。Slave_IO_Running如果這個是no可能是寫有問題,一般看看防火牆是否關閉,selinux是否爲disabled

wKiom1eiE1CQuNX3AACG_NZnlkY224.png

在master端加入表信息:

mysql> createtable student(username varchar(12) not null, number varchar(12) not null);

mysql> insertinto values('dog','111');

mysql> select *from student;

+----------+--------+

| username | number|

+----------+--------+

| dog      | 111   |

+----------+--------+

1 row in set (0.00sec)

在slave端

mysql> usewestos;

mysql> select *from student;

+----------+--------+

| username | number|

+----------+--------+

| dog      | 111   |

+----------+--------+

1 row in set (0.00sec)

 

這裏面記錄了master端的信息

mysql-bin.000001  slave端的複製二進制文件就來自master的這個文件。

wKioL1eiE4HT2PRQAAAiV0JbHOg371.png

[root@server2mysql]# mysqlbinlog mysql-bin.000001 查看對數據庫的操作。

 

 

 

 

                      mysqlABC 複製

 

 

 

 

     A                 B                     C

Mastermaster         slave                   slave

 

 

 

B的數據來自master,C的數據來自B所以對B而言既是master又是slave,但是BC只做讀操作,不執行寫,只有A執行寫。

實驗 server2 :master

     Server3 :slave

     Server4:slave

[root@server4 ~]#yum install mysql-server -y

[root@server3mysql]# /etc/init.d/mysqld stop

[root@server3mysql]# vim /etc/my.cnf

wKioL1eiE9PyCzliAAAUDFQGoyo805.png


[root@server3 mysql]# /etc/init.d/mysqld restart

[root@server4 ~]# vim /etc/my.cnf

mysqld里加

wKiom1eiE_LjfDRGAAAE_NQRIXI870.png

[root@server4 ~]#/etc/init.d/mysqld start

Server3:

mysql> grantreplication slave on *.* to linux@'172.25.137.4' identified by 'redhat';

Query OK, 0 rowsaffected (0.00 sec)  給server4授權

[root@server4 ~]#mysql -h 172.25.137.3 -u linux -predhat  測試是否能連通server3

Server4  要向數據能同時存在,就必須給的環境一樣,在實驗中同一個westos的庫裏的數據一致就必須現有這個庫。

wKioL1eiFAuSCVAtAABZmM120VE912.png

change master tomaster_host='172.25.137.3',master_user='linux',master_password='redhat',master_log_file='mysql-bin.000005',master_log_pos=106;  與server3同步。

[root@server2mysql]# mysqlbinlog mysql-bin.000001  在這個文件裏找到在westos數據庫建表的那個命令,

975是指開始建表的數值,1120是這條命令結束的數值

還有一種是用時間找

wKioL1eiFCrDWBP-AAAzGBiqXL8006.png

[root@server2mysql]# mysqlbinlog --start-position=975 --stop-position=1224 mysql-bin.000001|less  這是通過數值查找master的wesos數據庫相關操作

[root@server2mysql]#  mysqlbinlog--start-datetime='2016-07-30 13:53:26' --stop-datetime='2016-07-30 13:55:10'mysql-bin.000001 |less 這是通過時間來查找master的wesos數據庫相關操作。

[root@server2mysql]#scp mysql-bin.000001 172.25.137.4:/mnt 把master這個二進制文件發送給slave。

[root@server2mysql]# mysqldump -pwestos westos > backup.sql 把westos這個庫備份到backup.sql文件。

[root@server4 mnt]#ls

mysql-bin.000001

[root@server4 mnt]#mysqlbinlog --start-position=975 --stop-position=1224 mysql-bin.000001|mysql         把這個二進制文件倒入到westos這個庫,使三個westos數據庫在一個環境下。

在master的westos數據庫上操作。

Mysql備份方式:

  1. 冷備:需要關閉服務,且讀寫請求不允許。

  2. 熱備:服務正常,備份不影響。

  3. 溫備:服務正常,但是隻允許讀不允許寫。

     

    Mysql備份方法:

  4. :mysqldump  單線程,緩慢

  5. :mysqlpump 多線程,它的最小限度每張表可以綁一個線程

  6. :mydumpe 多線程,最小限度每張表可以綁多個線程

     


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章