概念
MySQL支持主从库的机制,所谓主从库的机制就是将数据库进行克隆,从库同步主库的变更,二者行为同步。
原理
当主库开启了二进制日志文件binlog
的功能之后,主库数据的变更会将其写到binlog
文件中去。从库去订阅主库的binlog
文件,通过IO进程将主库binlog
文件的变更同步到从库的RelayLog
中继日志中去,再由从库的线程将中继日志中的信息同步至从库数据库。
优势
- 一个主库可以有多个从库,可以大大降低主库的压力
- 一个从库也可以作为主库,因此MySQL集群可以做成树状的形式
- 可以在从库执行读操作,主库执行写操作再同步从库,从而实现读写分离
- 主库出现故障的时候,从库可以顶上
- 数据库备份这种比较耗费性能的操作可以在从库执行
操作
主库操作:
- 前往
my.cnf
MYSQL配置文件中进行如下配置:# MYSQL服务ID,集群环境中唯一标识符
server-id=1
# 指定binlog文件的存放路径
log-bin=/var/lib/mysql/mysqlbin
# 是否只读:1只读,0读写
read-only=0
# 不需要同步的数据库(一般mysql这种默认库不需要同步)
binlog-ignore-db=mysql - 重启主库MYSQL服务:
service mysql restart;
- 进入mysql:
mysql -u 用户名 -p密码;
- 创建同步数据的账户并进行授权操作
# 创建一个账户test,密码是test11,ip是192.168.1.100,权限为主从同步,可以同步的数据库与表为*.*也就是全部
grant replocation slave on *.* to 'test'@'192.168.1.100' identified by 'test11';
# 刷新权限
flush privileges; - 查看主库状态:
show master status;
从库操作:
- 前往
my.cnf
MYSQL配置文件中进行如下配置:# MYSQL服务ID,集群环境中唯一标识符
server-id=2
# 指定binlog文件的存放路径
log-bin=/var/lib/mysql/mysqlbin - 重启从库mysql服务:
restart mysql service;
- 进入mysql:
mysql -u 用户名 -p密码;
- 设置主库:
change master to master_host= '主库IP', master_user='主库同步账号', master_password='主库同步账号的密码', master_log_file='推送的日志文件', master_log_pos=推送日志的位置;
(后两个参数来自于主库show master status
的查询结果) - 开启主从同步操作:
start slave;
- 检测是否开启主从同步:
show slave status;
,Slave_IO_Running 和 Slave_SQL_Running 均为YES即表示主从已开启。