1.主从复制
概念
主从复制:一种数据库复制技术。主数据库 把更新操作同步复制到 从数据库,实现主从数据库拥有一样的数据库环境。
作用
- 对数据进行热备,如果主数据库出现故障无法正常工作时,从服务器可以接管服务,确保系统能正常运行。
- 读写分离。主数据库负责写操作,把读操作分摊到多个从服务器中。实现负载均衡,提高系统的性能。
- 数据备份。主从复制可以将主数据库的数据备份到从数据库中,从而保证数据的安全性和可恢复性。
实现方式
- 传统的binlong日志方式
- GTID方式
全局事务标识:global transaction identifiers
是用来代替传统复制的方法,GTID复制与普通复制模式的最大不同就是不需要指定二进制文件名和位置
具体实现步骤
(1)binlog日志方式
主机:
在/etc/my.cnf内,开启binlog日志,设置服务id号
vim /etc/my.cnf
log-bin=/var/log/mysql/mysql-bin #设置binlog日志的存放目录
server-id=1
#修改存放目录的所属组与属主
chown mysql.mysql /var/log/mysql/
#重启mysql
systemctl restart mysqld
进入mysql, 查看master内的binlog日志的文件名、position
show master status\G
如下图:
从机:
进入/etc/my.cnf,在[mysqld]下添加服务id号
vim /etc/my.cnf
server-id=2
#重启mysql
进入mysql,查看并修改master配置,开启slave,并检验
help change master to #查看master配置选项
如下图:
进入mysql
\e #进入编辑模式
CHANGE MASTER TO
MASTER_HOST='主机ip',
MASTER_USER='主机授权用户的名字',
MASTER_PASSWORD='授权用户密码',
MASTER_PORT=3306,
MASTER_LOG_FILE='存放binlog日志的文件名',
MASTER_LOG_POS=154, #主机master服务的positiion
MASTER_CONNECT_RETRY=10
start slave
show slave status\G
i/0线程和sql线程均为yes表示主从复制建立成功
(2)GTID方式
GTID工作原理
- master更新数据时,会在事务前产生GTID,一同记录到binlog日志中
- slave端的i/o 线程将变更的binlog,写入到本地的relay log中
- sql线程从relay log中获取GTID,然后对比slave端的binlog是否有记录
- 如果有记录,说明该GTID的事务已经执行,slave会忽略;如果没有记录,slave就会从relay log中执行该GTID的事务,并记录到binlog
主机
vim /etc/my.cnf #在[mysqld]下添加如下内容
server-id=1 #定义server id master必写
log-bin = mylog #开启binlog日志,master比写
gtid_mode = ON #开启gtid
enforce_gtid_consistency=1 #强制gtid
[root@mysql-master ~]# systemctl restart mysqld #重启
#进入mysql创建授权账户:
mysql> grant replication slave,reload,super on *.* to 'slave'@'%' identified by 'cqing@123';
mysql> flush privileges; #刷新
从机
vim /etc/my.cnf #添加如下配置
server-id=2
gtid_mode = ON
enforce_gtid_consistency=1
master-info-repository=TABLE
relay-log-info-repository=TABLE
[root@mysql-slave ~]# systemctl restart mysqld
#进入mysql
mysql> \e
change master to
master_host='master1', #主ip 地址
master_user='授权用户', #主服务上面创建的用户
master_password='授权密码',
master_auto_position=1
-> ;
mysql> start slave; #启动从机
mysql> show slave status\G #查看状态,验证sql和I/O是不是yes