linux系统MySQL主从同步--使用binlog日志方式

声明: 如果您有更好的技术与作者分享,或者商业合作; 请访问作者个人网站 http://www.esqabc.com/view/message.html 留言给作者。 如果该案例触犯您的专利,请在这里:http://www.esqabc.com/view/message.html 留言给作者说明原由, 作者一经查实,马上删除。

手机留言请访问:http://www.esqabc.com

复制方式

MySQL5.6开始主从复制有两种方式:基于日志(binlog)、基于GTID(全局事务标示符)。 本文只涉及基于日志binlog的主从配置 1、基于语句的复制SBR(基于sql语句复制)-statement 在Master上执行的SQL语句,在Slave上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。一旦发现没法精确复制时,会自动选着基于行的复制

2、基于行的复制RBR(基于行的复制)-row 把改变的内容复制到Slave,而不是把命令在Slave上执行一遍。从MySQL5.0开始支持

3、混合类型的复制MBR(混合模式复制)-mixed 默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制

关于复制过滤

复制过滤可以让你只复制服务器中的一部分数据,有两种复制过滤:

1、在Master上过滤二进制日志中的事件 2、在Slave上过滤中继日志中的事件。

1,准备工具:

(1)linux 系统的Mysql数据库(一个作为主数据库),如果不用知道自己的数据库版本,请执行:mysql -V

(2)linux 系统的Mysql数据库(一个作为从数据库,注意:从数据库可以多个)

注意:同步的两个数据库版本一致,windows系统安装的MySql数据库命令有所不同。

2,配置Master(主数据库)

1,如果数据库正在运行,请先停止服务, 执行命令:service mysql stop

2,修改配置文件(my.cnf),安装路径不同,注意配置文件所在的位置,windows系统的文件为(my.ini), 执行命令:vim /usr/local/mysql/my.cnf 保存退出命令:按键盘Esc 然后输入 (:wq )

[mysqld]
## 设置server_id,一般设置为IP,注意要唯一,确保主从不相同
server_id=1
## 复制过滤:也就是指定哪个数据库不用同步
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=test
##设置同步数据库(如:esqsui)
binlog-do-db=esqsui 	
## 开启二进制日志功能,可以随便取,最好有含义(关键就是这里了)
log-bin=mysql-bin-1
##MySQL 磁盘写入策略以及数据安全性
##每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去
innodb_flush_log_at_trx_commit=1
## 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M
## 主从复制的格式(mixed,statement,row,默认格式是statement)
## SBR(基于sql语句复制),RBR(基于行的复制),MBR(混合模式复制)
binlog_format=mixed
## 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。单位:天
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
## 设置binlog每个日志文件大小
max_binlog_size=20M
##当sync_binlog =N (N>0) ,MySQL 在每写 N次 二进制日志binary log时,会使用fdatasync()函数将它的写二进制日志binary log同步到磁盘中去,
##sync_binlog 的默认值是0,像操作系统刷其他文件的机制一样,MySQL不会同步到磁盘中去而是依赖操作系统来刷新binary log。
sync_binlog=1

3,重新启动mysql 服务,执行命令:service mysql start

4,使用命令登录数据库: (1)执行命令: mysql -uroot -p (2)创建同步账号命令:

 grant replication slave on *.* to 'bak'@'%' identified by 'bak';

(3)执行命令:show master status; 在主(master)上查看binlog日志文件,以及坐标,如下图:

(5),使用SQL语句创建同步账号: 创建账号:

CREATE USER 'bak'@'%' IDENTIFIED BY 'bak';

在主(master)上查看binlog日志文件,以及坐标: show master status; 如下图

关于复制过滤 复制过滤可以让你只复制服务器中的一部分数据,有两种复制过滤:

1、在Master上过滤二进制日志中的事件 2、在Slave上过滤中继日志中的事件。

3,配置从Slave(从数据库)

1,如果数据库正在运行,请先停止服务, 执行命令:service mysql stop

2,修改配置文件(my.cnf),安装路径不同,注意配置文件所在的位置,windows系统的文件为(my.ini), 执行命令:vim /usr/local/mysql/my.cnf 保存退出命令:按键盘Esc 然后输入 (:wq )

[mysqld]
## 设置server_id,一般设置为IP,注意要唯一,确保主从不相同
server_id=2
## 复制过滤:也就是指定哪个数据库不用同步
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=test
##设置同步数据库(如:esqsui)
binlog-do-db=esqsui 	
## 开启二进制日志功能,可以随便取,最好有含义(关键就是这里了)
log-bin=mysql-bin-1
##MySQL 磁盘写入策略以及数据安全性
##每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去
innodb_flush_log_at_trx_commit=1
## 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M
## 主从复制的格式(mixed,statement,row,默认格式是statement)
## SBR(基于sql语句复制),RBR(基于行的复制),MBR(混合模式复制)
binlog_format=mixed
## 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。单位:天
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
## 设置binlog每个日志文件大小
max_binlog_size=20M
##当sync_binlog =N (N>0) ,MySQL 在每写 N次 二进制日志binary log时,会使用fdatasync()函数将它的写二进制日志binary log同步到磁盘中去,
##sync_binlog 的默认值是0,像操作系统刷其他文件的机制一样,MySQL不会同步到磁盘中去而是依赖操作系统来刷新binary log。
sync_binlog=1
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1
## 防止改变数据(除了特殊的线程)
read_only=1

3,重新启动mysql 服务,执行命令:service mysql start

4,完成Master(主)和Slave(从)链接

1,在从数据库中,执行命令登录:mysql -uroot -p

2,执行命令:

change master to 
master_host='192.168.1.100', 
master_user='bak', 
master_password='bak', 
master_port=3306, 
master_log_file='mysql-bin-1.000001', 
master_connect_retry=30,
master_log_pos=317;


上面执行的命令的解释:

master_host=’192.168.1.100’ ## Master的IP地址

master_user=’bak’ ## 用于同步数据的用户(在Master中授权的用户)

master_password=’bak’ ## 同步数据用户的密码

master_port=3306 ## Master数据库服务的端口

master_log_file=’mysql-bin-1.000001’ ##指定Slave从哪个日志文件开始读复制数据(Master上执行命令的结果的File字段)

master_log_pos=317## 从哪个POSITION号开始读(Master上执行命令的结果的Position字段)

master_connect_retry=30 ##当重新建立主从连接时,如果连接建立失败,间隔多久后重试。单位为秒,默认设置为60秒,同步延迟调优参数。

注意:如果需要修改配置信息,请执行命令:stop slave; 停止进程

3,启动进程命令:start slave 结果如下图:

4,查看结果命令:show slave status\G 结果如下:

*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.100
Master_User: bak
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin-1.000001
...........
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
...........
Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O
 ...........
1 row in set (0.00 sec)

会发现Slave_IO_Running和Slave_SQL_Running是Yes了,表明开启成功

5,在主数据库,新增一条数据,然后去从数据库查看,如果看到从数据库可以查到,就说明配置成功了

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏arebirth重生者的IT之路

Spring整合Mybaits java.sql.SQLException: Access denied for user '***'@'localhost' (using password: YES

最近在搞Spring和Mybatis的整合,当我们在Spring里面配置数据源,而数据源是从外部的properties文件读取过来的时候就会报错

15020
来自专栏arebirth重生者的IT之路

Java 实现MD5加密

通过上边的资料我们大概可以知道,MD5是一种难以逆向(逆转)的加密方式,那么我们在程序中,究竟怎么使用呢??

58420
来自专栏大话存储

恢复带宽与时延的平衡

随着数据集规模的不断增长,数据中心负载对内存、存储的性能和容量的要求也在不断提高。与此同时,每单位时间需要处理更多数据,组成计算系统的组件性能也在不断提高。所谓...

9110
来自专栏大数据和云计算技术

HBase数据导入工具总结

本文对HBase常用的数据导入工具进行介绍,并结合云HBase常见的导入场景,给出建议的迁移工具和参考资料。

19820
来自专栏木东居士的专栏

浅谈数据治理、数据管理、数据资源与数据资产管理内涵及差异点(建议收藏)

随着信息技术的不断涌现和普及,业务发展加快了数据膨胀的速度,行业内衍生了较多的新名词,如数据治理、数据管理、数据资源管理、数据资产管理等名词的定义很多,概念容易...

29720
来自专栏arebirth重生者的IT之路

操作mysql第一次访问速度慢(远程)

最近在使用java操作远程的mysql数据库的时候,第一次请求非常的慢,而且极其容易引起系统的崩溃报错连接超时

15220
来自专栏科研猫

GEO数据库挖掘(1)--SCI文章速成

最近这段时间,相信好多人都在忙着写国自然标书,一晃2019年的2月份已经过去,今年只剩下10个月了,留给我们的时间不多啦(像不像导师或者主任开会时的讲话啊

20920
来自专栏科研猫

GEO数据库挖掘(2)--快速锁定目标数据

在上一期的推文 GEO数据库挖掘(1)--SCI文章速成 ,我们讲解了关于GEO数据库的背景知识,想必大家也了解了GEO是一个非常实用和权威的基因表达谱数据库。...

14420
来自专栏arebirth重生者的IT之路

Oracle模糊查询CONCAT参数个数无效

在使用MyBatis操作Oracle数据库的时候,写模糊查询突然发现原本在MySql中正确的代码,在Oracle中报错,参数个数无效

12130
来自专栏木东居士的专栏

辨析BI、数据仓库、数据湖和数据中台内涵及差异点(建议收藏)

随着大数据技术的不断更新和迭代,数据管理工具得到了飞速的发展,相关概念如雨后春笋一般应运而生,如从最初决策支持系统(DSS)到商业智能(BI)、数据仓库、数据湖...

27730

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励