Mysql主从复制的配置

参考

https://www.cnblogs.com/superfat/p/5267449.html

概论

Mysql的读写分离的前提就是 主从复制,只有配置好了主从复制,才可以使用中间件(sharding-jdbc)来执行代码层面方便安全的读写分离。
下面的例子演示的一主一从的配置(一个windows ,一个linux 虚拟机),Mysql的版本 5.7.19,配的过程有很多坑,一个个迈,不过最终还是成功了。

Mysql 主从复制的配置过程

从数据库IP地址: 192.168.29.129
主数据库IP地址: 192.168.29.1

  1. 主服务器给从服务器授权: 授权用户 synchzs /123456
    登录mysql以后执行授权命令(授权了 SLAVE权限和File权限)
GRANT REPLICATION SLAVE ON *.* to 'synchzs'@'192.168.29.129' identified by '123456';

GRANT ALL PRIVILEGES ON *.* to 'synchzs'@'192.168.29.129' identified by '123456' WITH GRANT OPTION;
FLUSH PRIVILEGES;
  1. 配置主服务器(在 %datadir%/binlog文件夹下面生成 mysql-bin.0001一些列日志)
[mysqld]
server-id=1
log-bin=./binlog/mysql-bin
binlog_format=mixed
binlog-do-db=testsync
binlog-ignore-db=eedu
  1. 重启主服务器(可能需要权限 windows)
  • 停止:net stop mysql
  • 启动:net start mysql
  • 登录mysql: show master status; 查看是否配置成功,查看 bin-log的文件名和index下标
  1. 在从数据库创建对应的准备主从复制的数据库

  2. 修改从数据库的配置文件:一定要有 server-id 的字段

[mysqld]
server-id=129
port = 3306
user = mysql
basedir=/usr/share/mysql
datadir=/var/lib/mysql
tmpdir=/tmp
  1. 配置从数据库
  • 先关闭slave(如果你以前配置过主从的话,一定要先关闭)
  • 通过命令的形式指定 主从关系
  • 再按照新的配置 启动slave
stop slave;

change master to master_host='192.168.29.1',master_port=3306,master_user='synchzs',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=800; 

start slave;

参数解释:

  • MASTER_HOST : 设置要连接的主服务器的ip地址

  • MASTER_USER : 设置要连接的主服务器的用户名

  • MASTER_PASSWORD : 设置要连接的主服务器的密码

  • MASTER_LOG_FILE : 设置要连接的主服务器的bin日志的日志名称,即第3步得到的信息

  • MASTER_LOG_POS : 设置要连接的主服务器的bin日志的记录位置,即第3步得到的信息,(这里注意,最后一项不需要加引号。否则配置失败)

  1. 从服务器通过 show slave status \G; 命令,查看自己和主服务器的链接情况
    如果show slave status显示 Slave_IO_Running: NO Slave_SQL_Running: No 的话,重启一下主从服务器,等都显示Yes的时候,主从复制就成功了

  2. 在主数据库 创建一张 student表,并且插入一条数据。插入之后,通过从服务器读取,可以读取成功。

注意事项

  1. Slave授权、file授权,最好都做
  2. 测试网络是否正常,所以在从服务器可以先尝试通过命令远程连接主服务器,从而排除网络的问题,和file权限的问题
远程连接尝试
mysql -usynchzs -p123456 -h 192.168.29.1
show databases; //查看授权过了的数据库
  1. 排查问题的时候,可以尝试阅读日志文件,默认mysql的日志文件在dataDir配置的路径下面

  2. 其实可以在从服务器设置 read-only=1 ,来避免普通用户直接往 从库里面插入数据,但是root用户仍然有权限插入数据,除非锁住全部的表

  3. 如果从库的数据库名称和主库不一样,需要在从库的my.cnf里面配置别名

//主库的eedu  从库的别名是eedu_hbk2 这个库
replicate-rewrite-db = eedu -> eedu_hbk2

猜你喜欢

转载自blog.csdn.net/weixin_34018202/article/details/87513123