mySQL5.7Replication - juedaiyuer/researchNote GitHub Wiki

#MySQL5.7---复制笔记#

##复制基础##

MySQL的复制是异步复制

主从同步,会有一定的延迟时间

mysql主从同步图

MySQL的复制是基于BinLog日志

记载了需要传输给从服务器的各种修改动作

三种日志格式

  1. Statement:存储SQL语句,存储日志量是最小的
  2. Row:存储event数据,存储日志量大,但是不能很直接的进行读取
  3. Mixed:介于两者之间,对于不确定的操作使用Row记录,如果每天数据操作量很大,产生的日志较多,可以考虑该格式

生产环境下,推荐使用Row和Mixed;

MySQL复制可以对整个实例进行复制,也可以对实例中的某个库或某个表进行复制

Master端

binlog-do-db
binlog-ignore-db

slave端

replicate-do-db
replicate-ignore-db
replicate-do-table
replicate-ignore-table
replicate-wild-do-table
replicate-wild-ignore-table

复制类型

  1. 基于二进制日志的复制
  2. 使用GTID完成基于事务的复制

MySQL支持半同步复制

5.7之前 mysql半同步复制

5.7之后waiting slave dump上移了一位

##主从复制(master/slave)配置##

###基于日志点的复制###

####配置主服务器master####

#在mysqld的下面加入下面的代码	

log-bin=mysql-bin
server-id=1
innodb_flush_log_at_trx_commit=1
sync_binlog=1
binlog-do-db=wordpress
binlog_ignore_db=mysql

server-id可以任意定义,确保唯一性即可

binlog-do-db=wordpress是表示只备份wordpress

binlog_ignore_db=mysql表示忽略备份mysql

不加binlog-do-db和binlog_ignore_db,那就表示备份全部数据库

在Master端建立复制用户

create user 'yourusername'@'192.168.3.%' identified by 'yourpassword';
grant replication slave on *.* to 'yourusername'@'192.168.3.%';

锁定数据库以防止写入数据

mysql>FLUSH TABLES WITH READ LOCK;

导出Master数据库

#mysqldump -u root -pyourpassword --all-databases  --lock-tables=false  -- > /root/all.sql	

scp /root/all.sql ...

解锁数据表

mysql>UNLOCK TABLES;

mysql>SHOW MASTER STATUS;

记住显示信息,配置从服务器会用到

####配置从服务器slave####

导入主服务器的数据库

#mysql -u root -pyourpassword < /root/all.sql

my.cnf

#在mysqld下面加入
server-id=2

#service mysqld restart

登陆mysql服务器,执行以下命令

mysql>CHANGE MASTER TO
MASTER_HOST='X.X.X.X',
MASTER_USER='user',
MASTER_PASSWORD='password',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=98,
MASTER_CONNECT_RETRY=10;

MASTER_HOST:主服务器的IP MASTER_USER:配置主服务器时建立的用户名

启动slave进程

mysql>START SLAVE;

查看mysql的日志,一般在/var/log目录下的mysqld.log


##source##

  1. imooc
  2. mysql官方文档---Replication
  3. Linux MySQL主从复制(Replication)配置