Mysql——主从同步

、什么是Binlog?

Mysql的二进制日志可以是Mysql最重要的日志, 记录了所有的DDL和DML语句(除了数据查询语句之外的语句)语句,以事件形式记录,还包含语句所执行的消耗时间,Mysql的二进制日志是事务安全型的。

二进制日志包含两类文件:

1、二进制日志索引文件(文件后缀为".index")用于记录有所的二进制文件;

2、二进制日志文件(文件后缀为“.00000*”)记录了数据库所有的DDL和DML(除了数据查询语句之外的语句)

Binlog类型

Mysql Binlog种类有三种:Statement、Mixed、Row。

1、Statement:语句级,binlog会记录每次执行写操作的语句。

优点:节省空间。

缺点:有可能造成数据不一致。

2、row:行级,binlog会记录每次操作后每行记录的结果。

优点:保持数据的绝对一致性。

缺点:占用较大空间。

3、mixed:statement的升级版本,一定程度上解决了因为一些情况而造成的statement模式不一致问题,默认还是statement,在某些情况下,譬如:当函数中包含UUID()时,包含AUTO_INCREMENT字段的表被更新时;执行INSERT DELAYED语句时;用UDF时;会按照ROW的方式进行处理

优点:节省空间,同时兼顾了一定的一致性。

缺点:还有些极个别情况依旧会造成不一致,另外statement和mixed对于需要对binlog的监控的情况都不方便。

、主从同步机制

1、从数据库执行start slave,开启主从复制开关,slave服务器的IO线程请求从master服务器读取binlog(如果该线程追赶上了主库,会自动进入休眠状态)。

2、主数据库的更新SQL(update、insert、delete)被写到binlog,主库的binlog dump thread会把binlog的内容发送到从库。

3、从库启动之后,创建一个I/O线程,读取主库传过来的binlog内容并写到relaylog(会记录位置信息,一遍下次继续读取)。

4、从服务器的sql线程会实时检测relaylog中新增的日志内容,把relaylog解析成sql语句并执行。

四、主从同步配置
1、主数据库
1)登入MySQL,创建用于同步的账号(主数据库上创建)

[root@centos7-192.168.1.40 opt]# grant replication slave on *.* to replication@'从库IP地址/IP地址段' identified by '123456';

2)查看master状态,并记录File:xxx、Position:yyy

[root@centos7-192.168.1.40 opt]# show master status \G;

2、从数据库
1)登入MySQL,指定主数据库服务器信息

mysql>change master to master_host='192.168.1.40',    #主数据库IP地址
master_user='replication',                            #主数据库上的同步账户账号
master_password='starcor',                            #同步账号密码
master_log_file='mysql-bin.000007',                   #日志文件(主库:show master status)
master_log_pos=341;                                   #偏移位置(主/从库位置偏移了多少)

2)修改auto.cnf配置文件的server-uuid配置

mysql>show variables like 'datadir';        #查看auto.cnf存放路径
+---------------+-------------------+
| Variable_name | Value             |
+---------------+-------------------+
| datadir       | /data/mysql/data/ |
+---------------+-------------------+
1 row in set (0.01 sec)
主从之间的server-uuid配置不能一致。

3)修改my.cnf配置文件的server-id配置
        主从之间的server-id配置不能一致。
4)启动slave程序g

mysql>start slave;

5)检查同步状态

mysql>show slave status \G;
# 检查项
Slave_IO_Running: Yes        #用于主从同步的线程IO线程是否在跑(Last_IO_Error:记录IO报错信息)
Slave_SQL_Running: Yes        #从数据库的SQL执行线程是否在跑(Last_SQL_Error:记录SQL报错信息)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值