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
- 主服务器给从服务器授权: 授权用户 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;
- 配置主服务器(在 %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
- 重启主服务器(可能需要权限 windows)
- 停止:net stop mysql
- 启动:net start mysql
- 登录mysql: show master status; 查看是否配置成功,查看 bin-log的文件名和index下标
-
在从数据库创建对应的准备主从复制的数据库
-
修改从数据库的配置文件:一定要有 server-id 的字段
[mysqld]
server-id=129
port = 3306
user = mysql
basedir=/usr/share/mysql
datadir=/var/lib/mysql
tmpdir=/tmp
- 配置从数据库
- 先关闭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步得到的信息,(这里注意,最后一项不需要加引号。否则配置失败)
-
从服务器通过 show slave status \G; 命令,查看自己和主服务器的链接情况
如果show slave status显示 Slave_IO_Running: NO Slave_SQL_Running: No 的话,重启一下主从服务器,等都显示Yes的时候,主从复制就成功了 -
在主数据库 创建一张 student表,并且插入一条数据。插入之后,通过从服务器读取,可以读取成功。
注意事项
- Slave授权、file授权,最好都做
- 测试网络是否正常,所以在从服务器可以先尝试通过命令远程连接主服务器,从而排除网络的问题,和file权限的问题
远程连接尝试
mysql -usynchzs -p123456 -h 192.168.29.1
show databases; //查看授权过了的数据库
-
排查问题的时候,可以尝试阅读日志文件,默认mysql的日志文件在dataDir配置的路径下面
-
其实可以在从服务器设置 read-only=1 ,来避免普通用户直接往 从库里面插入数据,但是root用户仍然有权限插入数据,除非锁住全部的表
-
如果从库的数据库名称和主库不一样,需要在从库的my.cnf里面配置别名
//主库的eedu 从库的别名是eedu_hbk2 这个库
replicate-rewrite-db = eedu -> eedu_hbk2