数据库PHP专题服务器运维方向

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;,输出如下:


状态结果

创建用户并授权:用户: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上创建表的应用。

  1. 启动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'; 
上一篇下一篇

猜你喜欢

热点阅读