异步复制
异步复制是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;
数据复制成功