MySQL主从复制
2019-01-17 15:39
781 查看
MySQL主从复制简介
Mysql的
主从复制方案,都是
数据传输的,只不过MySQL无需借助第三方工具,而是自带的同步
复制功能,MySQL的
主从复制并不是磁盘上文件直接同步,而是将
binlog日志发送给从库,由从库将
binlog文件里的内容写入本地数据库。
在生产环境中,MySQL主从复制都是异步方式同步,即不是实时同步数据。
MySQL主从复制原理:
从库读取
master.info文件中的信息(连接参数,最后一次请求binlog的位置点),向
主库请求binlog文件,
主库接受到
从库发送过来的信息后(验证通过),将本地对应的
binlog日志发送至
从库,
从库接收到binlog文件后,会存储到
TCP/IP缓存中,并发送ACK给
主库,告诉
主库自己已经收到
binlog日志了,那么
主库收到ACK后接着干别的事了,
从库将
TCP/IP缓存中的内容写入到本地的
relaylog日志文件中,
从库会将最后一次获取到的binglog位置点更新至master.info文件,然后
IO线程读取relay-log.info中的最后一次执行到的
relaylog位置点(以这个位置点为起点,往后执行中继日志),最后将
relaylog日志文件中对应的位置点的内容写入(恢复)
数据库中,执行完数据写入后,将最后最后一次执行数据写入(恢复)的
relaylog位置点更新至relay-log.info文件
每一次binlog请求都是按照上面所写的循序来执行
MySQL主从复制部署
MySQL主从复制条件
- 两台以上mysql实例(多台物理机或多个mysql实例)
- 开启
binlog功能,确保所有实例server-id不同- 主库建立
同步账号(replication slave特殊的权限)- 将全备文件恢复到
从库上(需人为操作)- 从库配置
master.info(change master..),复制的binlog位置点(需人为操作)- start
slave复制开关
1.环境规划
所有机器统一centos7.4系统环境,并且都已经安装好了mysql 5.7.20
主机名 | IP地址 | 服务 |
---|---|---|
db01 | 10.0.0.51 | mysql 主库 |
db02 | 10.0.0.52 | mysql 从库 |
2.所有mysql都开启binlog功能,确保所有mysql的
server-id不同
需要添加的配置如下: #主库 /etc/my.cnf [mysqld] server_id=1 log-bin=/application/mysql/data/mysql-bin sync_binlog = 1 binlog_format = row skip-name-resolve #关闭域名解析 #从库 /etc/my.cnf [mysqld] server_id=2 log-bin=/application/mysql/data/mysql-bin sync_binlog = 1 binlog_format = row skip-name-resolve 提示:从库的relay-log路径可自定义,默认在data目录下以主机为前缀保存
server-id 用于全网唯一标识一台mysql机器
2.主库授权主从复制用户
replication slave 一个特殊的权限,专门用于主从复制
mysql> grant replication slave on *.* to rep@'10.0.0.%' identified by '123456';
3.主库将数据库数据做全备,然后将备份文件推送至从库
- 主和从同时搭建新的环境,就不需要备份主库数据,恢复从库了,直接从第一个binlog(mysql-bin.000001)开头位置(120)
- 如果主库已经工作了很长时间了,那么需要备份主库数据,恢复到从库,然后从库从备份的时间点起,自动进行复制
#1.将数据库的数据全备到/backup目录下 [root@db01 ~]# mysqldump -uroot -p123456 -A -B -R --master-data=2 --single-transaction |gzip >/backup/full_$(date +%F).sql.gz #2.将全备通过scp推送到从库的/backup目录下 [root@db01 ~]# scp /backup/full_2019-01-15.sql.gz root@10.0.0.52:/backup 提示:/backup 目录请自行创建
4.从库将备份文件恢复至数据库
#1.解压备份文件 [root@db02 ~]# gunzip /backup/full_2019-01-15.sql.gz #2.进入数据库,将备份文件导入到本地数据库 mysql> source /backup/full_2019-01-15.sql #3.检查数据是否恢复成功 mysql> show databases;
5.从库上都找到binlog位置点
虽然全备文件已经恢复到了从库,但是全备之后的数据的变化是没有进行备份的,所以从库还需要指定binlog位置点,这样从库才知道该从哪里开始同步数据
#直接在从库的全备文件中找到binlog位置点 [root@db02 /]# sed -n '22p' /backup/full_2019-01-15.sql -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;
6.从库配置master info
master info就是指配置一系列主从复制参数,该参数为change master to,来实现主从复制
#1.进入数据库配置 change master to change master to master_host='10.0.0.51', master_port=3306, master_user='rep', master_password='123456', master_log_file='mysql-bin.000001', master_log_pos=154; #2.开启主从同步功能(开启IO和SQL线程), mysql> start slave; #3.查看主从复制的状态(截取部分) #当在slave状态中可以看到如下参数,都为yes表明成功,(从库有一个IO和一个SQL) mysql> show slave status\G ... Slave_IO_Running: Yes Slave_SQL_Running: Yes ... change master to参数解释: master_host='10.0.0.51', #主库的IP地址 master_port=3306, #主库的端口 master_user='rep', #主库上创建的用于复制的用户rep master_password='123456', #rep用户的密码 master_log_file='mysql-bin.000001', #二进制日志文件的名称 master_log_pos=154; #二进制日志偏移量 提示:mysql> help change master to 可获取配置案例
slave的操作命令:
mysql> stop slave; #停止slave
mysql> reset slave; #清空slave的配置参数(change master to)
从库的master.info和relay-log.info文件
#执行完change master to命令后,会自动生成master.info文件,保存change master to的参数和最后一次获取binlog日志文件名和对应的位置点 ls /application/mysql/data/master.info #执行完start slave命令后,会自动生成relay-log.info文件,保存已执行过的relaylog的位置点 ls /application/mysql/data/relay-log.info
7.主库创建数据库,在到从库验证数据是否同步
#1.主库创建数据库:sample mysql> create database sample; #2.从库查看数据是否同步 mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | case1 | | case2 | | mysql | | performance_schema | | sample | | sys | | test | | xmh | +--------------------+
从库去向主库请求的binlog日志会保存在从库本地的relaylog日志中
[root@db02 /]# ls /application/mysql/data/db02-relay-bin.* /application/mysql/data/db02-relay-bin.000001 /application/mysql/data/db02-relay-bin.000002 /application/mysql/data/db02-relay-bin.index
扩展:从库开启记录binlog功能
从库需要记录
binlog的应用场景为:当前的从库还需要作为其它从库的主库,例如:级联复制和双主互为主从场景的情况下
#从库的my.cnf中加入如下参数,然后重启服务生效即可 log-slave-updates #开启从库记录binlog功能 log-bin = /application/mysql/data/mysql-bin expire_logs_days = 7 #bin-log保留时间(只保留7天)
MySQL主从复制故障
主从复制状态信息介绍
mysql> show slave status\G Slave_IO_Running: Yes Slave_SQL_Running: Yes Last_IO_Errno: 0 #记录最后一次IO的错误代码 Last_IO_Error: #显示导致IO的错误原因 Last_SQL_Errno: 0 #记录最后一次SQL的错误代码 Last_SQL_Error: #显示导致SQL的错误原因
相关文章推荐
- mysql主从复制和读写分离配置
- mysql 主从复制中relay log丢失怎么处理
- mysql 主从复制+双主复制
- mysql主从同步复制错误解决一例
- MySql 主从复制的配置(GTID 方式)
- linux debian系统下配置mysql主从复制(同步):
- mysql主从复制和mycat读写分离
- mysql实现主从复制
- mysql主从复制
- linux系统中使用openssl实现mysql主从复制
- mysql主从复制的原理及配置实现
- MySQL安装与主从复制配置
- 使用Spring实现读写分离( MySQL实现主从复制)
- mysql主从复制的高可用解决方案
- mysql之主从复制详解
- MySql之主从复制及读写分离
- 深入解析半同步与异步的MySQL主从复制配置
- mysql主从复制的实现
- Mysql5.7.18的安装与主从复制图文详解
- Centos6.5 源码搭建MYSQL5.5+MySQL主从复制