異步複製
異步複製是MySQL自帶的最原始的複製方式,主庫和備庫成功建立複製關係後,在備庫上會有一個IO線程去主庫拉取binlog,並將binlogx到本地,然後備庫會開啓另外一個SQL線程取回放Relay log,通過這種方式達到Master-Slave數據同步的目的
通常情況下,slave是隻讀的,可以承擔一部分讀流量,而且可以根據實際需要,添加一個或者多個slave,這樣在一定程度上可以緩解主庫的讀壓力
另一方面,若Master出現異常(crash,硬件故障等),無法對外提供服務,此時Slave可以承擔起master的重任,避免了單點的產生,所以複製就是爲容災和提高性能而生
基於Position
的主從複製
需要找到binlog(MASTER_LOG_FILE)和POS點(MASTER_LOG_POS)
主庫
ip:192.168.1.1/24
host:server1
1、mysql-*.rpm
獲取安裝包
2、tar zvf mysql-*.rpm
3、yum install -y mysql-community-client-*.rpm mysql-community-common-*.rpm mysql-community-server-*.rpm mysql-community-libs*.rpm mysql-community-libs-compat-*.rpm
4、
grep password /var/log/mtsqld.log
查看初始密碼
5、
mysql_secure_installation
數據庫安全初始化
6、
vim /etc/my.cnf
29 log-bin=mysql-bin
30 server-id=1
7、systemctl start mysqld
8、mysql -uroot -p*
進入數據庫
9、grant replication slave on *.* to leon@'192.168.1.%' identified by 'Wps+123ld';
10、show master status;
File:mysql-bin.*
Position:*
從庫
ip:192.168.1.2/24
host:server2
1、mysql-*.rpm
獲取安裝包
2、tar zvf mysql-*.rpm
3、yum install -y mysql-community-client-*.rpm mysql-community-common-*.rpm mysql-community-server-*.rpm mysql-community-libs-*.rpm mysql-community-libs-compat-*.rpm
4、grep password /var/log/mtsqld.log
查看初始密碼
5、mysql_secure_installation
數據庫安全初始化
6、vim /etc/my.cnf
29 server-id=2
7、systemctl start mysqld
8、mysql -uroot -p*
9、change master to master_host='192.168.1.1',master_user='leon',master_password='Wps+123ld',master_log_file='mysql-bin.*'(server1 master File),master_log_pos=*(server1 master Position);
10、start slave;
11、show slave status\G;
查看從庫(server2)是否連接主庫(server1)
Slave_IO_Rumming:Yes
Slave_SQL_Rumming:Yes
測試
主庫生成數據
1、mysql -uroot -p*
2、show databases;
3、cerate database testdata;
4、use testdata;
5、create table user (username varchar(20) not null, password varchar(20) not null);
6、desc user;
查看user表結構
7、insert into user values('user1','123456');
8、select * from user;
查看user表數據
從庫查看數據
1、mysql -uroot -p*
2、show databases;
發現test數據庫
3、use test;
進入test數據庫
4、select * from user;
查看user表數據
基於Gtid
的主從複製
Gtid複製不像傳統的複製方式(異步複製、半同步複製)需要找到binlog(MASTER_LOG_FILE)和POS點(MASTER_LOG_POS)
只需要知道master的IP、端口、賬號、密碼即可,因爲複製是自動的,MySQL會通過內部機制Gtid自動找點同步
和基於Position的主從複製的不同之處在於:它是以一整個事件爲單位進行復制的
主庫
vim /etc/my.cnf
啓用gtid模塊
systemctl restart mysqld
從庫
vim /etc/my.cnf
啓用gtid模塊
systemctl restart mysqld
mysql -uroot -p*
stop slave;
change master to master_host='172.25.30.1',master_user='leon',master_password='Wps+123ld',master_auto_position=1;
從第一件事情開始跟蹤
start slave;
show slave status\G;
測試
主庫
mysql -uroot -p*
use westos;
westos數據庫已生成內已有usertb表
insert into usertb values ('user2','123');
insert into usertb values ('user3','123');
插入兩組數據
從庫
mysql -uroot -p*
show slave status\G;
select * from usertab;
數據複製成功