5.主从复制实战

1.数据准备
首先在主库和从库执行下面语句,准备测试数据。

create database if not exists study character set = utf8;
CREATE TABLE `user` (
	`id` int(11) NOT NULL,
	`username` varchar(30) NOT NULL,
	`password` varchar(100) NOT NULL,
	`create_time` datetime(6) NOT NULL,
	`update_time` datetime(6) NOT NULL,
  	PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into user values (1, 'steven','0192023a7bbd73250516f069df18b500','2022-12-16 08:08:08', '2022-12-16 08:08:08');
insert into user values (2, 'sherry','0192023a7bbd73250516f069df18b500','2022-12-16 18:18:18', '2022-12-16 18:18:18');

2.主库操作
(1).打开binlog,并重启主数据库

vim /etc/my.cnf
#主配置
[mysqld]
log-bin=/var/lib/mysql/mysql-bin
server-id=123456
service mysqld restart

(2).给主库加全局锁,只能读不能写,保证不产生新的binlog日志

mysql> FLUSH TABLES WITH READ LOCK;

(3).查看主库binlog日志写到哪一条,需要在从数据库配置File和Position

mysql> SHOW MASTER STATUS \G;

在这里插入图片描述

(4).把主库所有数据库数据备份,并将备份文件上传到从库

mysqldump -u root --all-databases --master-data > dbdump.sql
scp dbdump.sql  root@121.4.191.124:/root/dbdump.sql

在这里插入图片描述

(5).取消全局锁,新增数据,产生新的binlog日志

mysql> UNLOCK TABLES;

3.从库操作
(1).打开binlog,并重启从数据库

vim /etc/my.cnf
#从配置
[mysqld]
log-bin=/var/lib/mysql/mysql-bin
server-id=654321
service mysqld restart

(2).查看备份文件
在这里插入图片描述

(3).查看从库binlog日志写到哪一条

mysql> SHOW SLAVE STATUS \G;

在这里插入图片描述

(4).设置从库的主库并开启主从复制

mysql> CHANGE MASTER TO MASTER_HOST='121.4.211.73',MASTER_USER='root',MASTER_PASSWORD='********',MASTER_LOG_FILE='mysql-bin.000015',MASTER_LOG_POS=1543;
mysql> START SLAVE;

(5).再次查看从库binlog日志写到哪一条,发现和配置的主数据库一样
在这里插入图片描述

4.测试
(1).在主库往user表插入一条新数据

mysql> use study;
mysql> insert into user values (3,'owen','0192023a7bbd73250516f069df18b500','2023-01-16 08:08:08', '2023-01-16 08:08:08');
mysql> select * from user;

在这里插入图片描述

(2).从库查询

mysql> use study;
mysql> select * from user;

在这里插入图片描述

(3).检查主从binlog位置
在这里插入图片描述
在这里插入图片描述

(4).查看主从进程信息

mysql> SHOW PROCESSLIST \G;

在这里插入图片描述

主数据库存在一个dump binlog的线程,下载新的binlog。

mysql> SHOW PROCESSLIST \G;

在这里插入图片描述

从数据库存在一个等待主数据库发送dump binlog的线程,还有一个读取binlog的线程。

5.配置优化
(1).问题描述
LOG_FILE和LOG_POS不是很方便,根本原因是,备库不知道从哪一个log开始复制。

(2).思路
给每个事务分配一个全局唯一ID,GTID=server_uuid:gno,server_uuid为节点的uuid,gno为事务的流水号。GTID不仅简化了主从复制配置,而且对主从切换和故障恢复具有重要意义。

(3).主数据库操作

vim /etc/my.cnf
#主配置
[mysqld]
gtid_mode=on
enforce_gtid_consistency=on
service mysqld restart

(4).从数据库操作

vim /etc/my.cnf
#从配置
[mysqld]
gtid_mode=on
enforce_gtid_consistency=on
service mysqld restart
#暂停主从复制
mysql> STOP SLAVE; 
#使用GTID进行主从复制
mysql> CHANGE MASTER TO MASTER_HOST='121.4.211.73',MASTER_USER='root',MASTER_PASSWORD='********',MASTER_AUTO_POSITIOIN=1;
#开始主从复制
mysql> START SLAVE; 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值