mySQL5.7Replication - juedaiyuer/researchNote GitHub Wiki
#MySQL5.7---复制笔记#
##复制基础##
MySQL的复制是异步复制
主从同步,会有一定的延迟时间
MySQL的复制是基于BinLog日志
记载了需要传输给从服务器的各种修改动作
三种日志格式
- Statement:存储SQL语句,存储日志量是最小的
- Row:存储event数据,存储日志量大,但是不能很直接的进行读取
- 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
复制类型
- 基于二进制日志的复制
- 使用GTID完成基于事务的复制
MySQL支持半同步复制
5.7之前
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##