搭建Mysql数据库主从读写分离
原理:
主服务器创建同步用户,用户向主服务器发起建立数据库aa的请求(create database aa),主服务器通过应用线程把请求转发给i/o守护线程,主服务器i/o守护线程生成数据库同时生成二进制日志bin.000001,bin.000001.index,然后主服务器主动推送二进制日志到从服务器,并唤醒从服务器的i/o守护线程和sql守护线程,从服务器i/o守护线程将日志转存为relay-bin.000001和relay-bin.000001.index,sql守护线程将日志翻译成真正的数据,完成工作后,从服务器的i/o守护线程和sql守护线程进入休眠状态,等待新的操作唤醒!
# 服务Id,必须唯一
server-id=1
# 日志文件名
log-bin=master-bin
# 日志索引值
log-bin-index=master-bin.index
SHOW MASTER STATUS;
如果显示如下,即为主库配置完成
server-id=2
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin
保证server-id与主库不一致,配置多个从库时,只需要改变server-id即可
- 先建立一个操作主从同步的数据库用户,切换到主数据库执行
create user test;
GRANT REPLICATION SLAVE ON *.* TO 'test'@'从库IP地址' IDENTIFIED BY 'test';
flush privileges;
配置的含义就是创建了一个数据库用户test,密码是test, 在从服务器使用test这个账号和主服务器连接的时候,就赋予其REPLICATION SLAVE的权限,表面这个权限是针对主库的所有表的
- 进入从数据库后执行:
change master to master_host='主库IP',master_port=3306,master_user='test',master_password='test',master_log_file='master-bin.000001',master_log_pos=6485;
- 执行start slave启动从库
start slave;
停止主从同步的命令为:
stop slave
- 查看状态命令,\G表示换行查看
show slave status \G;
- 此时,主从库的关联就建立好了,可以在主库创建数据库和表,观察从库是否有相应数据。
大概思路:
一主多重只需要修改从库server-id即可,其他与一主一从配置一致
参考: