mysql 读写分离配置,主/备形式
2018-12-20 本文已影响0人
阿休
1、配置master
1)配置
server-id=1
log-bin=mysql-bin
#server-id:为主服务器A的ID值 log-bin:二进制变更日值
2)、重启master
docker中重启
docker restart [CONTAINER ID,容器id]
linux中重启
# a) 使用 service 启动:
service mysqld restart
service mysql restart (5.5.7版本命令)
# b) 使用 mysqld 脚本启动:
/etc/init.d/mysqld restart
运行SHOW MASTER STATUS;,输出如下:
![](https://img.haomeiwen.com/i5560930/c08a69a5f22f9127.png)
创建用户并授权:用户:repl密码:slavepass
mysql> CREATE USER 'repl'@'123.57.***.***' IDENTIFIED BY 'slavepass';#创建用户
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'123.57.44.85';#分配权限
mysql>flush privileges; #刷新权限
2、配置slave
1)配置
slave的配置与master类似,你同样需要重启slave的MySQL。如下:
log_bin = mysql-bin
server_id = 2
relay_log = mysql-relay-bin
log_slave_updates = 1
read_only = 1
server_id是必须的,而且唯一。slave没有必要开启二进制日志,但是在一些情况下,必须设置,例如,如果slave为其它slave的master,必须设置bin_log。在这里,我们开启了二进制日志,而且显示的命名(默认名称为hostname,但是,如果hostname改变则会出现问题)。relay_log配置中继日志,log_slave_updates表示slave将复制事件写进自己的二进制日志(后面会看到它的用处)。有些人开启了slave的二进制日志,却没有设置log_slave_updates,然后查看slave的数据是否改变,这是一种错误的配置。所以,尽量使用read_only,它防止改变数据(除了特殊的线程)。但是,read_only并是很实用,特别是那些需要在slave上创建表的应用。
- 启动slave
mysql> CHANGE MASTER TO
-> MASTER_HOST='182.92.***.***',
-> MASTER_USER='rep1',
-> MASTER_PASSWORD='slavepass',
-> MASTER_LOG_FILE='mysql-bin.000001',
-> MASTER_LOG_POS=155;
mysql> start slave;
3)查看slave状态
mysql> show slave status\G;
出现错误:
error connecting to master 'rep1@'39.108..:3306' - retry-time: 60 retries: 4
解决办法:
docker start master-mysql 开始Master mySql
docker ps -a 查出自己创建的container(容器)的ID
docker exec -it 63c9e29aelef bash (每个人创建的container ID都不一样)
mysql --user=root --password
ALTER USER 'rep1'@'39.108.***.***' IDENTIFIED WITH mysql_native_password BY 'slavepass';