主从服务器
一.什么是主从服务器
建立一个和主数据库完全一样的数据库环境,称为从数据库,主数据库一般是准实时的业务数据库。一台服务器充当主服务器,而另外一台服务器充当从服务器。
主服务器会将更新信息写入到一个特定的二进制文件(binlog)中,并会维护文件的一个索引(binlog.index)用来跟踪日志循环,这个日志(binlog)可以记录并发送到从服务器的更新中去。从服务器连接到主服务器之后,从服务器有一个 IO 线程,将主服务器的 binlog 日志拷贝到自己本地,写入一个 relay中继日志(relay log)中。接着从库中有一个SQL线程会从中继日志读取binlog,然后执行binlog日志中的内容,也就是在自己本地再次执行一遍SQL语句,从而使从服务器和主服务器的数据保持一致。
主从配置就是围绕这个原理配置,也就是说:从库会生成两个线程,一个I/O线程,一个SQL线程;I/O线程会去请求主库的binlog,并将得到的binlog写到本地的relay-log(中继日志)文件中;主库会生成一个log dump线程,用来给从库I/O线程传binlog;SQL线程,会读取relay log文件中的日志,并解析成sql语句逐一执行。
二.主从服务器的搭建
传统搭建方式
主服务器ip:192.168.77.131
从服务器ip:192.168.77.130
操作系统:centos7(虚拟机VMware)
1.在主从服务器上分别安装mysql5.7。
2.分别创建同步用户repl,并在主服务器上授予从服务器复制权限:
create user 'repl'@'192.168.77.130' identified by 'root$123';
grant replication slave on *.* to 'repl'@'192.168.77.130' identified by 'root$123';
flush privileges;
3.配置主服务器的mysql配置文件:/etc/my.cnf,在[mysqld]下插入:
[mysqld]
server-id = 1077131
binlog-do-db=repl #需要同步的数据库,如果没有本行表示同步所有的数据库
binlog-ignore-db=mysql #被忽略的数据库
#
(可以不执行这部分,采用默认同步的数据库,但是服务器id必须不同)
4.查看master状态:
并记录下binlog文件和文件内偏移量:mysql-bin.000001,4095。
5.回到从服务器,根据上面的记录设置主服务器信息:
change master to master_host='192.168.77.131', master_port=3306, master_user='repl', master_password='root$123', master_log_file='mysql-bin.000001', master_log_pos=4095;
6.开启同步:
并查看连接状态:
slave_io_running和slave_sql_running为yes则成功。
gtid搭建方式
1.什么是gtid:
Gtid由两部分组成,前面部分是由snowflake算法按照当前时间生成的uuid,即服务器的id,后面部分是序列号,即第几个事务。一个gtid代表一个事务,由于uuid的唯一性,一个gtid只会生成一次。
二.Gtid的作用:
1用于指代事务的编号
2简化复制,传统的主从服务器的搭建需要指定binlog文件和偏移量position,使用gtid的情况下只需要知道master的ip端口账号密码,就可以进行复制,mysql自动找点同步(MASTER_AUTO_POSITION=1)
三.gtid搭建:
1.将原来传统方式的my.cnf改动注释掉,在主从服务器的my.cnf中加入:
gtid-mode = ON
enforce-gtid-consistency = ON
2.重新同步:
stop slave;
start slave;
3.查看当前已经执行到的gtid:
4.MySQL提供了选项可以控制跳过某些gtid事务。
mysql> stop slave;
mysql> set @@global.gtid_purged='5b9728c1-aed4-11ea-ba44-000c29f5d996:4';
mysql> begin;
mysql> commit;
mysql> SET SESSION GTID_NEXT = AUTOMATIC;
mysql> start slave;