MySQL 复制全解析 Part 4 使用备库搭建MySQL复制
前情提要
MySQL复制全解析 Part 2 一步步搭建基于二进制文件位置的MySQL复制
MySQL复制全解析 Part 3 MySQL半同步复制设置
实验环境
此次实验的环境如下
- MySQL 5.7.25
- Redhat 6.10
- 操作系统账号:mysql
- 数据库复制账号:repl
- 复制格式:基于行的复制
IP地址 |
主从关系 |
复制账号 |
复制格式 |
---|---|---|---|
11.12.14.29 |
主库 |
repl |
Row-Based |
11.12.14.30 |
从库(半同步) |
repl |
Row-Based |
11.12.14.31 |
从库(异步) |
repl |
Row-Based |
这节我们的内容为MySQL的复制,MySQL复制有两种形式
- 基于二进制日志文件位置
- 基于GTID
上节我们讲了如何通过备份主库来进行复制的搭建,如果主库不允许我们进行备份,这时可以通过备库来进行
通过备库进行搭建和通过主库搭建步骤是一样的,只是在备份备库时使用--dump-slave参数而不是--master-data参数
该参数的目的为获取该备库对应的主库的二进制的位置
这里我假设大家已经搭建好了一套主从的复制
1. 开启二进制日志功能
无论是使用哪种方式我们都需要启用二进制日志功能
如果未开启则需要在my.cnf文件中加入如下参数,需要重启数据库生效
主库
[mysqld]
server-id = 11121429
binlog_format = row
log_bin = /datalog/mysql/binlog/mysql-bin.log
expire_logs_days = 14
从库(半同步)
[mysqld]
server-id = 11121430
binlog_format = row
log_bin = /datalog/mysql/binlog/mysql-bin.log
expire_logs_days = 14
read_only=1
从库(异步)
[mysqld]
server-id = 11121431
binlog_format = row
log_bin = /datalog/mysql/binlog/mysql-bin.log
expire_logs_days = 14
read_only=1
我们需要保证server-id不一样,这里我们用IP地址命名
从库使用了read_only参数确保无其他写入
之后重启数据库
这里需要注意的是如果从库是由主库克隆而来,这时的uuid是一样的,这样也会报错
2. 查看UUID是否一致
需要注意的是如果从库是由主库克隆而来,这时的uuid是一样的,这样也会报错
该文件位于daadir的auto.cnf文件中
vim /data/mysql/data/auto.cnf
如果一样可删除该文件后重新启动数据库即可,这时会生成一个新的文件
3. 建立复制账号
接下来我们建立一个独立的用于复制的账号
从库(异步)
mysql> CREATE USER 'repl'@'11.12.14.29' IDENTIFIED BY 'rpl';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'11.12.14.29';
mysql> CREATE USER 'repl'@'11.12.14.30' IDENTIFIED BY 'rpl';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'11.12.14.30';
mysql> CREATE USER 'repl'@'11.12.14.31' IDENTIFIED BY 'rpl';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'11.12.14.31';
mysql>flush privileges;
这里我们限制该账号只能从同步的三台服务器上连接
4. 备份主库
我们通过mysqldump备份主库的文件,这里使用--dump-slave来获取主库的位置点
从库(异步)
mysqldump -S /data/mysql/data/mysql.sock -usystem -p --all-databases --dump-slave --set-gtid-purged=off > /tmp/dumpslave.sql
5. 文件传输
接下来将主库的dump文件传到备份,之后更改备库的文件权限
从库(半同步)
scp /tmp/dumpslave.sql root@11.12.14.30:/tmp
从库(异步)
chown mysql:mysql /tmp/dumpslave.sql
6. 备库导入数据
接下来我们将备份的数据导入到备份
从库(异步)
mysql -S /data/mysql/data/mysql.sock -usystem -p </tmp/dumpslave.sql
7.开始同步
接下来我们开启同步
首先我们查看dumpslave.sql文件中master的信息
之后使用如下命令开启同步
从库(异步)
mysql> change master to master_host='11.12.14.29', master_user='repl', master_password='rpl',master_log_file='mysql-bin.000003',master_log_pos= 9615332;
mysql > start slave;
8. 查看同步状态
使用如下命令查看同步是否正常
从库(异步)
mysql>show slave statusG
主要关注如下几点
- Slave_IO_Running需要为YES
- Slave_SQL_Running需要为YES
- Seconds_Behind_Master需要为0
9. 重启和重置复制
使用如下命令关闭重启
mysql>stop slave;
mysql>start slave;
我们可以独立的重启IO进程或者SQL进程
mysql>stop slave sql_thread;
mysql>stop slave io_thread;
mysql>start slave io_thread;
mysql>start slave sql_thread;
使用如下命令重置复制
mysql>reset slave;
该命令更多内容后面介绍
10. 参考资料
本专题内容翻译自官方文档并结合自己的环境
https://dev.mysql.com/doc/refman/5.7/en/replication.html
觉得文章不错的欢迎关注,转发,收藏~
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- Python中好用又高效的Collections 模块
- 正确创建Python二维数组
- 深入理解Python内存管理与垃圾回收,再也不怕问了(一)
- 走进面向“对象”编程的理想国(一)——深入理解Python中的一切皆对象
- 深入理解Python内存管理与垃圾回收,再也不怕问了(二)
- 如何利用Python实现二分查找(迭代和递归)
- 详解排序算法(Python实现)
- Python垃圾回收机制
- iOS 开发:『Crash 防护系统』(二)KVO 防护
- 学Java到底学什么
- Python 的魔法方法及用途
- 四件简单的事情,帮助改善部署过程
- 为什么 Python 程序中很少看到驼峰式的命名方式?
- GATK的FilterMutectCalls如何才能成功呢
- Python字典按键/值排序的几种方法