0
点赞
收藏
分享

微信扫一扫

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;

5.主从复制实战_vim

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

mysqldump -u root --all-databases --master-data > dbdump.sql

scp dbdump.sql  root@121.4.191.124:/root/dbdump.sql

5.主从复制实战_主从复制_02

(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).查看备份文件

5.主从复制实战_mysql_03

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

mysql> SHOW SLAVE STATUS \G;

5.主从复制实战_主从复制_04

(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日志写到哪一条,发现和配置的主数据库一样

5.主从复制实战_主从复制_05

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;

5.主从复制实战_vim_06

(2).从库查询

mysql> use study;

mysql> select * from user;

5.主从复制实战_数据库_07

(3).检查主从binlog位置

5.主从复制实战_vim_08


5.主从复制实战_主从复制_09

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

mysql> SHOW PROCESSLIST \G;

5.主从复制实战_数据库_10

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

mysql> SHOW PROCESSLIST \G;

5.主从复制实战_主从复制_11

从数据库存在一个等待主数据库发送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;


举报

相关推荐

0 条评论