mysql 读写分离
数据库版本一致为前提:
主数据库 192.168.1.110
1、my.ini
[mysqld]下增加
server-id=1
log-bin=mysql3306-bin
binlog-do-db=test //要同步的mstest数据库,要同步多个数据库,就多加几个binlog-do-db=数据库名;如果不设置,默认全部
binlog-ignore-db=mysql //要忽略的数据库
binlog_format=mixed //srb brb srb对应非事务,有些函数无法一致如UUID();brb事务,完全复制,日志较大;mixed混合模式
2、重启服务
3、同步用户
#授权用户slave01使用123456密码登录mysql
mysql>
GRANT REPLICATION SLAVE,FILE ON *.* TO 'mstest'@'192.168.1.111' IDENTIFIED BY '123456'; --IP为从数据库的
flush privileges;
4、mysql>show master status;
一般做法:
给从库分配一个普通用户。
将slave数据库read-only=1设置只读后
在master执行
mysql>GRANT USAGE ON *.* TO 'mstest'@'192.168.1.111' IDENTIFIED BY '123456' WITH GRANT OPTION;(这里要区别上面给从库分配复制权限的写法,这里分配的是usage权限, 后面多了with grant option)
创建一个普通用户,
然后用普通用户登录从库,执行操作会报错。切换到root用户后还是可以进行增删改查的。
===============================分割线=======================================
从数据库 192.168.1.111
1、my.ini
[mysqld]下增加
server-id=2
read_only=1 //只读模式,可以限定普通用户进行数据修改的操作,但不会限定具有super权限的用户(如超级管理员root用户)的数据修改操作
//如果想保证super用户也不能写操作,就可以就需要执行给所有的表加读锁的命令 “flush tables with read lock;”
2、重启服务
3、root执行
mysql>
CHANGE MASTER TO
master_host='192.168.1.110',//主数据库IP
master_user='mstest',//主机的用户(就是刚刚在主机通过sql创建出来的账户)
master_password='123456',
master_port=3306,
master_log_file='mysql3306-bin.000006',//File(192.168.1.110中第4步信息)
master_log_pos=1120;//Position(192.168.1.110中第4步信息)
============测试==========
在主数据库中操作,再去从数据库看效果,省略。。。
=================================可能故障=====================================
从数据库操作
MySQL同步故障:"Slave_SQL_Running:No"
1、mysql> slave stop;
set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
slaver start;
2、mysql> slave stop;
change master to ......(主数据库的show master status信息)
slaver start;
=================================注意事项=====================================
注意:如果网络断了,主从网,那么网络通后,从数据库服务器要重启mysql服务,然后自动同步数据了
如果主数据库存在数据了,则主:
mysql> flush tables with read lock; 并记录status信息
然后拷贝主的data文件到从data里
mysql> unlock tables;