MySQL集群架构之主从模式异步复制实践
本文接MySQL集群架构之主从模式 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com),对异步复制方式进行实践全过程进行探究(过程中将附上各种操作可能出现问题后解决问题的操作,可能不是最优的)。
环境准备:
1、两台机器,ip分别是168.192.X.165/168.192.X.2。165为Master,2为Slave。本案例中Slave在win10环境中,具体安装启动可参考MYSQL8.0.26zip安装_树叶single-CSDN博客(net start mysql8.0.26(net start 服务名称)必须是管理员身份)。
2、使用MySQL的版本为8.0.26,确保两台机器上版本一样:
两台机器互通:
Master远程链接Slave失败(Linux——>Win10),修改Win10上设置:
链接失败:
修改Slave上机器密码,Windows下的实际操作如下:
1.关闭正在运行的MySQL:net stop mysql8.0.26
2.打开DOS窗口,转到mysql\bin目录。
3.输入mysqld --skip-grant-tables回车——无任何信息,控制台也不能再输入任何信息。
4.再开一个DOS窗口(因为刚才那个DOS窗口已经不能动了),转到mysql\bin目录。
5.输入mysql 使用root用户链接数据库。
6.改密码:ALTER USER 'root' IDENTIFIED WITH mysql_native_password BY 'ShirleyXXX*';
7.刷新权限(必须的步骤)<flush privileges;
root用户访问host权限对外开放(一定要重启mysql服务):
Master再次远程链接Slave成功(Linux——>Win10):
Slave链接Master成功:
操作:
Master配置:
1、在主库Master上,设置一个复制使用的账户,并授予 REPLICATION SLAVE权限。这里创建一个复制用户repl,可以从IP为192.168.X.2(Slave)的主机进行连接。
创建用户并设置权限:“grant 权限列表 on 数据库 to '用户名'@'访问主机' ”
grant replication slave on *.* to repl@'192.168.X.2';
repl是从(slave)端设置的访问主(master)端的用户,也就是要完成主从复制的用户,密码XXXX;IP192.168.X.2是从(slave)端的IP。
注意:类似“grant 权限列表 on 数据库 to '用户名'@'访问主机' identified by '密码' with grant option;”创建用户同时设置权限的方式在最新版本中已经不支持了,需要先创建用户再添加权限。
2、修改Master服务器的配置文件 mysql-server.cnf,开启 BINLOG,并设置 server-id的值,这两个参数的修改需要重新启动数据库服务才可以生效(Linux上修改文件/etc/my.cnf.d/mysql-server.cnf)。
修改配置后需重启服务:
3、得到Master上当前的二进制日志名和偏移量值。这个操作的目的是为了在从数据库启动以后,从这个点开始进行数据的恢复。执行show master status:
Slave配置:
4、修改Slave数据库的配置文件 my.cnf,增加 server-id参数。注意 server-id的值必须是唯一的,不能和主数据库的配置相同,如果有多个从数据库服务器,每个从数据库服务器必须有自己唯一的 server-id值。(参考Win10上安装MySQL8.0.26 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)修改my.ini文件:)
5、在Slave库上,使用 - -skip-slave- start选项启动从数据库,这样不会立即启动从数据库服务上的复制进程,方便我们对从数据库的服务进行进一步的配置。
操作命令:./bin/mysqld_safe --defaults-file=/etc/my.cnf --skip-slave-start(Linux上,win10上的mysql没有mysqld_safe)
或者启动后:
6、对Slave数据库服务器做相应设置,指定复制使用的用户,主数据库服务器的IP、端口以及开始执行复制的日志文件和位置等,参考代码如下:
CHANGE MASTER TO
MASTER_HOST='192.168.X.165',
MASTER_PORT=3306,
MASTER_USER='repl',
MASTER_PASSWORD='XXXX',
MASTER_LOG_FILE='master-bin.000001',
MASTER_LOG_POS=156;
查看slave状态:show slave status\G;
红框中状态均为YES表示成功,此时状态为NO,说明还有工作没有做。
7、在Slave库上,启动 slave线程:start slave; 进而查看slave状态:
“Slave_IO_Running” 的值为 Connecting 时,是因为slave数据库服务器去访问 master数据库服务器的 bin-log 时失败导致的。可能是第6步有问题,检查确实是的——用户repl写成了rep1。
重新执行配置5/6/7:成功。
8、这时slave上执行 show processlist命令将显示类似如下的进程:
9、在master上执行 show processlist命令将显示类似如下的进程:
11、测试:在主库上建一个test1数据库,发现在从库上也出现了,在主库test1上建area表,发现在从库上也出现了,在从库上建t_user表,发现主库上没有t_user,由此可以发现主从模式搭建完成。