MySQL5.6主从复制最佳实践
- Master 将数据改变记录到二进制日志(binary log)中,也就是配置文件 log-bin 指定的文件,这些记录叫做二进制日志事件(binary log events);
- Slave 通过 I/O 线程读取 Master 中的 binary log events 并写入到它的 中继日志(relay log);
- Slave 重做中继日志中的事件,把中继日志中的事件信息一条一条的在 本地执行一次,完成数据在本地的存储,从而实现将改变反映到它自己的 数据(数据重放)。
- 主从服务器操作系统版本和位数一致;主从服务器的 hostname 不要一致。
- Master 和 Slave 数据库的版本要一致;
- Master 和 Slave 数据库中的数据要一致;
- Master 开启二进制日志,Master 和 Slave 的 server_id 在局域网内必 须唯一;
- Master 和 Slave 都创建数据库 mbank,表 testuser ;
/etc/my.cnf [root@edu-mysql-01 ~]# vi /etc/my.cnf
# 在 [mysqld] 中增加以下配置项
# 设置 server_id,一般设置为 IP
server_id=57
# 复制过滤:需要备份的数据库,输出 binlog
binlog-do-db=mbank
# 复制过滤:不需要备份的数据库,不输出(mysql 库一般不同步)
binlog-ignore-db=mysql
# 开启二进制日志功能,可以随便取,最好有含义
log-bin=edu-mysql-bin
# 为每个 session 分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M
# 主从复制的格式(mixed,statement,row,默认格式是 statement)
binlog_format=mixed
# 二进制日志自动删除/过期的天数。默认值为 0,表示不自动删除。
expire_logs_days=7
# 跳过主从复制中遇到的所有错误或指定类型的错误,避免 slave 端复制中断。
# 如:1062 错误是指一些主键重复,1032 错误是因为主从数据库数据不一 致
slave_skip_errors=1062
# 如果需要同步函数或者存储过程
log_bin_trust_function_creators=true
(如想了解以上参数的更多详细解析,可以直接百度参数名)
- 在 Master 上过滤二进制日志中的事件;
- 在 Slave 上过滤中继日志中的事件。
- 基于语句的复制:在 Master 上执行的 SQL 语句,在 Slave 上执行同样的语句。MySQL 默认采用基于语句的复制,效率比较高。一旦发现没法精 确复制时,会自动选着基于行的复制。
- 基于行的复制:把改变的内容复制到 Slave,而不是把命令在 Slave 上 执行一遍。从 MySQL5.0 开始支持。
- 混合类型的复制:默认采用基于语句的复制,一旦发现基于语句的无法 精确的复制时,就会采用基于行的复制。
[root@edu-mysql-01 ~]# service mysql restart
Shutting down MySQL..[ OK ] Starting MySQL..[ OK ]
[root@edu-mysql-01 ~]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1
Server version: 5.6.26-log Source distribution
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reser ved.
Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input stat ement.
#创建数据同步用户,并授予相应的权限
mysql> grant replication slave, replication client on *.* to 'repl'@'192. 168.31.59' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
# 刷新授权表信息
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
# 查看 MySQL 现在有哪些用户及对应的 IP 权限
mysql> select user,host from mysql.user;
# 查看 position 号,记下 position 号(从机上需要用到这个 position 号和现 在的日志文件)
mysql> show master status;
Master 重启后会修改 mysql-bin 文件名(序号加 1)
[root@edu-mysql-02 ~]# vi /etc/my.cnf
## 在 [mysqld] 中增加以下配置项
# 设置 server_id,一般设置为 IP
server_id=59
# 复制过滤:需要备份的数据库,输出 binlog
binlog-do-db=mbank
#复制过滤:不需要备份的数据库,不输出(mysql 库一般不同步)
binlog-ignore-db=mysql
# 开启二进制日志,以备 Slave 作为其它 Slave 的 Master 时使用
log-bin=edu-mysql-slave1-bin
# 为每个 session 分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size = 1M
# 主从复制的格式(mixed,statement,row,默认格式是 statement)
binlog_format=mixed
# 二进制日志自动删除/过期的天数。默认值为 0,表示不自动删除。
expire_logs_days=7
# 跳过主从复制中遇到的所有错误或指定类型的错误,避免 slave 端复制中 断。
# 如:1062 错误是指一些主键重复,1032 错误是因为主从数据库数据不一 致
slave_skip_errors=1062
# relay_log 配置中继日志
relay_log=edu-mysql-relay-bin
# log_slave_updates 表示 slave 将复制事件写进自己的二进制日志
log_slave_updates=1
# 防止改变数据(除了特殊的线程)
read_only=1
如果 Slave 为其它 Slave 的 Master 时,必须设置 bin_log。在这里,我们 开启了二进制日志,而且显式的命名(默认名称为 hostname,但是,如果 h ostname 改变则会出现问题)。
[root@edu-mysql-02 ~]# service mysql restart
Shutting down MySQL..[ OK ] Starting MySQL..[ OK ]
[root@edu-mysql-02 ~]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3
Server version: 5.6.26-log Source distribution
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights rese rved.
Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input stat ement.
mysql> change master to master_host='192.168.31.57', master_user=' repl', master_password='123456', master_port=3306, master_log_file=' edu-mysql-bin.000001', master_log_pos=429, master_connect_retry=3 0;
Query OK, 0 rows affected, 2 warnings (0.01 sec)
mysql> show slave status\G;
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
mysql> show slave status\G;
mysql> show processlist\G;
mysql> INSERT INTO `testuser`(`usercode`,`username`) VALUES (`1`, '同步测试 1'),( `2`,'同步测试 2');
mysql> reset slave;
mysql> change master to master_host='192.168.31.57', master_user='repl',
master_password='123456', master_port=3306,
master_log_file='edu-mysql-bin.00000x', master_log_pos=xx, master_connect_retry=30;
- 网络延迟;
- Master 负载过高;
- Slave 负载过高;
mysql> show variables like ‘server_id';
+—————+——-+
| Variable_name | Value |
+—————+——-+
| server_id | 3 |
+—————+——-+
MySQL5.6主从复制最佳实践的更多相关文章
- ASP.NET跨平台最佳实践
前言 八年的坚持敌不过领导的固执,最终还是不得不阔别已经成为我第二语言的C#,转战Java阵营.有过短暂的失落和迷茫,但技术转型真的没有想象中那么难.回头审视,其实单从语言本身来看,C#确实比Java ...
- paip.mysql fulltext 全文搜索.最佳实践.
paip.mysql fulltext 全文搜索.最佳实践. 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blo ...
- mongodb 最佳实践
MongoDB功能预览:http://pan.baidu.com/s/1k2UfW MongoDB在赶集网的应用:http://pan.baidu.com/s/1bngxgLp MongoDB在京东的 ...
- RDS最佳实践(一)—如何选择你的RDS
在去年双11之前,为了帮助商家准备天猫双11的大促,让用户更好的使用RDS,把RDS的性能发挥到最佳,保障双11当天面对爆发性增加的压力,不会由于RDS的瓶颈导致系统出现问题,编写了 RDS的最佳实践 ...
- MySQL安装脚本最佳实践
MySQL安装脚本最佳实践 2018年9月19日 17:01 #!/bin/bash export host_ip=192.168.7.206 echo '#1.取master主机ip的后三位 ...
- 温习《PHP 核心技术与最佳实践》这本书
再次看这本书,顺手提炼了一下大致目录,以便后续看见目录就知道大概讲的些什么内容 PHP 核心技术与最佳实践 1.面向对象思想的核心概念 1.1 面向对象的『形』与『本』 1.2 魔术方法的应用 1.2 ...
- ngx_lua应用最佳实践
引子: 以下文字,是UPYUN系统开发工程师timebug在SegmentFault D-Day南京站技术沙龙上所做分享的内容要义提炼,主题为UPYUN系统开发团队在进行业务逻辑由C模块到ngx_lu ...
- 【转】.NET(C#):浅谈程序集清单资源和RESX资源 关于单元测试的思考--Asp.Net Core单元测试最佳实践 封装自己的dapper lambda扩展-设计篇 编写自己的dapper lambda扩展-使用篇 正确理解CAP定理 Quartz.NET的使用(附源码) 整理自己的.net工具库 GC的前世与今生 Visual Studio Package 插件开发之自动生
[转].NET(C#):浅谈程序集清单资源和RESX资源 目录 程序集清单资源 RESX资源文件 使用ResourceReader和ResourceSet解析二进制资源文件 使用ResourceM ...
- MySQL 5.7安装最佳实践
MySQL 5.7安装最佳实践 1.环境准备OS: CentOS Linux release 7.4.1708 (Core) for VMwareMySQL: mysql-5.7.24-linux-g ...
随机推荐
- python获取时间————前一天后一天前一小时后一小时前一分钟后一分钟
获取当天日期 一: import time print(time.strftime("%Y-%m-%d")) #输出当前日期 2018-05-01 二: import dateti ...
- Final阶段基于spec评论作品
组名:杨老师粉丝群 组长:乔静玉 组员:吴奕瑶 刘佳瑞 公冶令鑫 杨磊 刘欣 张宇 卢帝同 一.测试目标:拉格朗日2018——飞词 1.开始界面,只有一个开始游戏按钮,简约且醒目 ...
- Kafka与Logstash的数据采集对接
Logstash工作原理 由于Kafka采用解耦的设计思想,并非原始的发布订阅,生产者负责产生消息,直接推送给消费者.而是在中间加入持久化层--broker,生产者把数据存放在broker中,消费者从 ...
- 移动的调试工具vConsole
在PC端写代码调试的时候,直接console.log()即可,但是在手机端怎么调试??最近发现一个很有用的插件vConsole 首先引入插件: 然后再文件中使用即可: 这样再手机中就会出现下面的标识, ...
- js生成hash序列
炒鸡简单的js生成hash序列的方法.如下: function createHash (hashLength) { if (!hashLength || typeof(Number(hashLengt ...
- Hard to prepare 2018 徐州赛区网络预赛
题意: 就是由2k 个数 每次选一个 可以选同样的 围成一个圈 使得相邻的数同或为真 求方案数 解析: 第一个数有2k 种选择 之后的n-2个数 都有2k-1 种选择 第n个数 我们要考虑 它的左右 ...
- 【BZOJ1021】[SHOI2008]循环的债务(动态规划)
[BZOJ1021][SHOI2008]循环的债务(动态规划) 题面 BZOJ 洛谷 题解 感觉以前的题目都好小清新啊,我这种智商丢失的选手完全写不动. 这题看着就像一个\(dp\),并且我们发现每种 ...
- STM32配置GPIO前须先打开其时钟,否则配置失败
@2018-5-9 17:11:38 STM32配置GPIO前须先打开其时钟,否则配置失败
- 洛谷4859 BZOJ3622 已经没什么好害怕的了(DP,二项式反演)
题目链接: 洛谷 BZOJ 题目大意:有两个长为 $n$ 的序列 $a,b$,问有多少种重排 $b$ 的方式,使得满足 $a_i>b_i$ 的 $i$ 的个数比满足 $a_i<b_i$ 的 ...
- bzoj4542: [Hnoi2016]大数(莫队)
这题...离散化...$N$和$n$搞错了...查了$2h$...QAQ 考虑$s[l...r]$,可以由两个后缀$suf[l]-suf[r+1]$得到$s[l...r]$代表的数乘$10^k$得到的 ...