您好,登錄后才能下訂單哦!
下面講講關于什么是MYSQL的AB復制原理,文字的奧妙在于貼近主題相關。所以,閑話就不談了,我們直接看下文吧,相信看完什么是MYSQL的AB復制原理這篇文章你一定會有所受益。
Myslq AB復制
做AB復制之前前提時兩邊的數據必須一樣,Mysql復制默認的是異步復制,master將事物事件寫入binlog,但不知道slave何時接受且已接受,在異步復制的機制的情況下,如果master宕機,事務在master上已提交,但很可能這些事物沒有傳到任何slave上。此時salve有可能丟失事務。
官方半同步的復制的概念:
1 當slave主機連接到master時。能夠查看是否處于半同步復制的機制。
2 當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二進制文件,記錄的是堆數據庫所有的操作,在對數據庫進行備份的時候要用到這個文件。
[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
在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的這個文件。
[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
[root@server3 mysql]# /etc/init.d/mysqld restart
[root@server4 ~]# vim /etc/my.cnf
在mysqld里加
[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的庫里的數據一致就必須現有這個庫。
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是這條命令結束的數值
還有一種是用時間找
[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備份方式:
冷備:需要關閉服務,且讀寫請求不允許。
熱備:服務正常,備份不影響。
溫備:服務正常,但是只允許讀不允許寫。
Mysql備份方法:
:mysqldump 單線程,緩慢
:mysqlpump 多線程,它的最小限度每張表可以綁一個線程
:mydumpe 多線程,最小限度每張表可以綁多個線程
對于以上什么是MYSQL的AB復制原理相關內容,大家還有什么不明白的地方嗎?或者想要了解更多相關,可以繼續關注我們的行業資訊板塊。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。