主从mysql能过滤指定dml吗_mysql 5.7 主从复制

一、原理

该过程的第一部分就是master记录二进制日志。在每个事务更新数据完成之前,master在二日志记录这些改变。MySQL将事务串行的写入二进制日志,即使事务中的语句都是交叉执行的。在事件写入二进制日志完成后,master通知存储引擎提交事务。

下一步就是slave将master的binary log拷贝到它自己的中继日志。首先,slave开始一个工作线程——I/O线程。I/O线程在master上打开一个普通的连接,然后开始binlog dump process。Binlog dump process从master的二进制日志中读取事件,如果已经跟上master,它会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志。

SQLslave thread(SQL从线程)处理该过程的最后一步。SQL线程从中继日志读取事件,并重放其中的事件而更新slave的数据,使其与master中的数据一致。只要该线程与I/O线程保持一致,中继日志通常会位于OS的缓存中,所以中继日志的开销很小。

此外,在master中也有一个工作线程:和其它MySQL的连接一样,slave在master中打开一个连接也会使得master开始一个线程。复制 过程有一个很重要的限制——复制在slave上是串行化的,也就是说master上的并行更新操作不能在slave上并行操作。

(简短描述:主从数据库同步工作原理(流程):

但主库的数据发生修改时,数据更改的记录将写入到主库的二进制文件中,从库此时将会调用一个IO线程读取主库的二进制文件,并与中继日志作对比,并将存在差异的事件写入到中继日志中(当两日志内容事件一致时,IO线程将处于睡眠状态),然后从库再调用SQL线程去读取中继日志,并将刚写入的事件数据放入到从库中以保持主从数据库数据同步。)

二、要求mysql主从的环境要求

1、互相同步的两台mysql的版本必须保证大版本号一致。比如5.5+和5.6+之间同步数据,5.6的数据同步到5.5就会出现问题。保证大版本号一致很重要。

2、每台服务器必须开启binlog,不开启binlog则根本无法开始数据同步。

3、每台服务器必须配置不同的server-id,范围在1到(2^32-1)之间。

4、要保证防火墙对3306端口的开启,为了学习数据库的主从配置。

5、保证网络畅通

主从系统要保持一致:包括数据库版本,操作系统版本,磁盘IO磁盘容量,网络带宽等。

[root@data02 ~]# cat /etc/redhat-release

CentOS release 6.2 (Final)

[root@data02 ~]#

主库master

从库slave

OS系统版本

CentOS release 6.2 (Final)

CentOS release 6.2 (Final)

数据库版本

5.6.12-log

5.6.12-log

磁盘容量

50G

30G

主机ip地址

192.168.52.129

192.168.52.130

端口

3306

3306

内存

1G

1G

服务器类型

虚拟机

三、主服务配置

1. MySQL的配置文件的位置是在 /etc/my.cnf

添加

server_id=

#指定binlog的生成目录,很多人不是这么写的

log-bin=/var/lib/mysql-log/mastera

gtid_mode=on

enforce_gtid_consistency=1

2.创建binlog目录并授权mysql用户

mkdir /var/lib/mysql-log/mastera

chown mysql . /var/lib/mysql-log/mastera

3.重启mysql服务

service mysqld restart

4.查看binlog是否生成

ls /var/lib/mysql-log/mastera

5.导出主数据库(注:如果两个数据库状态一致即表及数据记录都一样,就不用做5,6这两步了)

mysqldump -uroot -p'密码' -A --single-transaction > /tmp/mysql.all.sql

这个过程会发生报警,因为用了明码。不用担心

6.将mysql.all.sql 拷贝到slave上,可以用scp命令

7.在slave服务器上将导出的mysql.all.sql脚本,导入mysql服务器

mysql -uroot -p'密码'  <  sql备份文件

8.查看slave上是否导入

四.从服务器操作

修改my.cnf

1.#设置和master不同的server-id

server-id=

gtid_mod=on

enforce_git_consistency=1

2.重启mysql服务

service mysqld restart

防火墙开启master 服务器的3306端口

centos6.* 开启方式

centos7.*的开启方式

[root@localhost ~]# firewall-cmd –add-port=3306/tcp

[root@localhost ~]# firewall-cmd –permanent –add-port=3306/tcp

[root@localhost ~]# firewall-cmd –reload success

五.最后两步

1.登录master授权slave

grant replication slave on  *.*  to ‘用户名’@'slaveip' identified by '密码';

flush privileges;

2.登录slave修改master

change master to master_host='192.168.0.103',master_user='slave1',master_password='123456',master_auto_position=1;

3.slave 上打开复制线程

start slave(停止slave 命令:stop slave)

4.查看slave状态

show slave status;

查看返回状态找到一下两个字段,

1) Slave_IO_Running: Yes

IO线程状态,必须YES

2) Slave_SQL_Running: Yes

SQL线程状态,必须YES

六.这时候就完成了主从复制

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值