MySQL主从复制——主库已有数据的解决方案
2018-07-30 08:05
567 查看
在上篇文章中我们介绍了基于Docker的Mysql主从搭建,一主多从的搭建过程就是重复了一主一从的从库配置过程,需要注意的是,要保证主从库my.cnf中server-id的唯一性。搭建完成后,可以在主库
我们来简单了解一下Mysql主从复制的过程:
(1) master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
(2) slave将master的binary log events拷贝到它的中继日志(relay log);
(3) slave重放中继日志中的事件,将改变反映它自己的数据。
第一种方案是选择忽略主库之前的数据,不做处理。这种方案只适用于不重要的可有可无的数据,并且业务上能够容忍主从库数据不一致的场景。
第二种方案是对主库的数据进行备份,然后将主数据库中导出的数据导入到从数据库,然后再开启主从复制,以此来保证主从数据库数据一致。
我们来详细看一下第二种方案的处理:
我们这里只需要备份TEST1数据库,若要备份全部数据库,[DATABASE]处使用
此时报出
修改完配置文件后,再次执行备份命令不需要涉及用户名密码相关信息。
和上一步一样,我们也需要在从数据库配置用于备份的用户名和密码信息。
需要先在从数据库建立一个同名数据库,才能导入主数据库备份数据。切换到从数据库执行
此时备份数据导入已完成,可以在从数据库进行数据验证。
启动主从复制
切换到从数据库,查询测试数据,说明主从复制成功。
尽可能减少锁表范围,只锁定相关的数据库。
作者:撸码那些事
微信公众号:
来源:http://songwenjie.cnblogs.com/
声明:本文为博主学习感悟总结,水平有限,如果不当,欢迎指正。如果您认为还不错,不妨点击一下下方的【推荐】按钮,谢谢支持。转载与引用请注明出处。
show slave hosts查看有哪些从库节点。
我们来简单了解一下Mysql主从复制的过程:
(1) master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
(2) slave将master的binary log events拷贝到它的中继日志(relay log);
(3) slave重放中继日志中的事件,将改变反映它自己的数据。
MySQL主从复制——主库已有数据的解决方案
由单机架构切换到一主一从或一主多从,在增加从库节点前,主库可能已经运行过一段时间,这种情况在实际业务中很常见。那么如何应对开启主从复制前主库有数据的场景呢?第一种方案是选择忽略主库之前的数据,不做处理。这种方案只适用于不重要的可有可无的数据,并且业务上能够容忍主从库数据不一致的场景。
第二种方案是对主库的数据进行备份,然后将主数据库中导出的数据导入到从数据库,然后再开启主从复制,以此来保证主从数据库数据一致。
我们来详细看一下第二种方案的处理:
查看主数据库已有的数据库
我们在主数据库准备了一个TEST1库,并且在其中准备一张数据表TEST和几条测试数据。使用Docker创建从数据库
docker run -p 3346:3306 --name mysql-slave4 -e MYSQL_ROOT_PA SSWORD=123456 -d mysql:5.7
锁定主数据库
锁定主数据库,只允许读取不允许写入,这样做的目的是防止备份过程中或备份完成之后有新数据插入,导致备份数据和主数据数据不一致。mysql> flush tables with read lock;
查询主数据库状态,并记下FILE及Position的值
mysql>show master status;
备份主数据库
退出mysql终端,执行docker mysql备份命令docker exec [CONTAINER] /usr/bin/mysqldump -u username --password=xxx [DATABASE] > backup.sql
我们这里只需要备份TEST1数据库,若要备份全部数据库,[DATABASE]处使用
--all-databases。
此时报出
Warning: Using a password on the command line interface can be insecure.,这是因为我们在命令行输入了密码,所以会有安全警告信息。解决方案是在/etc/mysql/my.cnf中加入如下配置:
[mysqldump] user = root password = rootpassword
修改完配置文件后,再次执行备份命令不需要涉及用户名密码相关信息。
主数据库备份数据导入从数据库
cat backup.sql | docker exec -i [CONTAINER] /usr/bin/mysql -u username --password=xxx [DATABASE]
和上一步一样,我们也需要在从数据库配置用于备份的用户名和密码信息。
需要先在从数据库建立一个同名数据库,才能导入主数据库备份数据。切换到从数据库执行
CREATE DATABASE TEST1;,然后再次导入主数据备份数据。
此时备份数据导入已完成,可以在从数据库进行数据验证。
配置从数据库
docker exec -it mysql-slave4 /bin/bash
cd /etc/mysql
vi my.cnf,加入以下配置,注意server-id要保证唯一:
service mysql restart重启mysql服务,这会使得mysql服务所在的docker容器停止
docker start mysql-slave4启动docker容器
配置主从链接
切换到从数据库,执行change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos= 4952, master_connect_retry=30;,关于这个命令在上一篇博客中有详细介绍。
启动主从复制
start slave;,此时查看从库状态
show slave status \G;,若是SlaveIORunning 和 SlaveSQLRunning 都是Yes,说明开启主从复制过程成功。
解锁主数据库
切换回主数据库的终端,进行表解锁操作。unlock tables;
测试主从复制
在主数据库插入一条测试数据切换到从数据库,查询测试数据,说明主从复制成功。
总结
应该尽可能优化流程,减少锁表时间。尽可能减少锁表范围,只锁定相关的数据库。
作者:撸码那些事
微信公众号:
来源:http://songwenjie.cnblogs.com/
声明:本文为博主学习感悟总结,水平有限,如果不当,欢迎指正。如果您认为还不错,不妨点击一下下方的【推荐】按钮,谢谢支持。转载与引用请注明出处。
相关文章推荐
- Mysql主从基本原理,主要形式以及主从同步延迟原理 (读写分离)导致主库从库数据不一致问题的及解决方案
- MySQL数据的主从复制、半同步复制和主主复制详解-转
- MySQL数据的主从复制、半同步复制和主主复制详解
- MySQL--数据备份还原以及主从复制
- MySQL与MariaDB的主从数据复制设置步骤
- MySQL主从复制之主库宕机处理
- linux搭建mysql主从服务自动复制数据
- Mysql主从复制(无数据情况)
- MySQL 5.7下主从复制延迟解决方案
- 运维工程师必备之MySQL数据的主从复制、半同步复制和主主复制详解
- MySQL数据的主从复制、半同步复制和主主复制详解
- MySQL数据的主从复制、半同步复制和主主复制详解
- Mysql 主从复制+数据恢复
- MySQL数据的主从复制、半同步复制和主主复制详解
- mysql数据业务垂直+水平分割+主从复制读写分离
- 运维工程师必备之MySQL数据的主从复制、半同步复制和主主复制详解
- MySQL5.6主从复制(mysql数据同步配置)
- mysql数据主从同步失败解决方案
- mysql主从复制延迟问题的相关知识与解决方案
- MySql主从配置文件问题详解(数据不同步解决方案)