mysql主从同步

2018-07-20  本文已影响46人  無法定义

mysql中为了读写分离,高可用时,都会用到mysql的主从同步方案。 MySQL的主从复制是一个异步的复制过程(虽然一般情况下感觉是实时的),数据将从一个Mysql数据库(我们称之为Master)复制到另一个Mysql数据库(我们称之为Slave),在Master与Slave之间实现整个主从复制的过程是由三个线程参与完成的。其中有两个线程(SQL线程和IO线程)在Slave端,另一个线程(I/O线程)在Master端。

环境搭建

下载镜像

docker pull mysql:5.7

配置

主库配置

  1. 新建文件夹/opt/mysql/master/conf和/opt/mysql/master/data
  2. data存放mysql数据
  3. conf存放配置my.cnf
[mysqld]
log-bin=mysql-bin
server-id=101
binlog-do-db=test
binlog_format=STATEMENT

从库配置

  1. 新建文件夹/opt/mysql/slave/conf和/opt/mysql/slave/data
  2. data存放mysql数据
  3. conf存放配置my.cnf
[mysqld]
log-bin=mysql-bin
server-id=102
replicate-do-table=test.pay_trade
binlog_format=STATEMENT

启动

启动主库

docker run --name mysql-master -v /opt/mysql/master/data:/var/lib/mysql -v /opt/mysql/master/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:5.7

启动从库

docker run --name mysql-slave -v /opt/mysql/slave/data:/var/lib/mysql -v /opt/mysql/slave/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -p 3307:3306 -d mysql:5.7

开启主备

创建库

在主备上创建相同的库test,并创建表pay_trade

主库开启同步

创建用于同步的账户

SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
GRANT REPLICATION SLAVE ON *.* to 'backup'@'%' identified by '123456';

查看主库状态

SHOW MASTER STATUS;
mark

从库开启同步

开启同步

SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
change master to master_host='172.18.160.102',master_user='backup',master_password='123456',master_log_file='mysql-bin.000005',master_log_pos=444227;

查看从库状态

SHOW SLAVE STATUS;
mark

同步方式

主库同步方式

从库同步方式

binlog三种模式

ROW

STATEMENT

MIXED

在Mixed模式下,MySQL会根据执行的每一条具体的sql语句来区分对待记录的日志格式,也就是在Statement和Row之间选择一种。如果sql语句确实就是update或者delete等修改数据的语句,那么还是会记录所有行的变更。

配置

show global variables like '%binlog_format%';
[myslqd]
log-bin=mysql-bin
#binlog_format=STATEMENT
#binlog_format=ROW
#binlog_format=MIXED

引用

上一篇下一篇

猜你喜欢

热点阅读