如何设置 mysql 的主从数据库?
发布于 作者:苏南大叔 来源:程序如此灵动~
苏南大叔的博客,因为要备案的缘故,所以实际上造成了两个数据库的情况。那么,在这里,苏南大叔就实践了一下:mysql的主从数据库设置,来解决这个问题。在本文中,有两台服务器的两个数据库,master和slave。服务器的mysql数据库,其实都是mariadb。
两边的mysql版本号都是:
mysql Ver 14.14 Distrib 5.7.19, for Linux (x86_64) using EditLine wrapper在设置这两台mysql之前,尽量断绝这两个mysql的写入功能。因为数据要同步的原因,写入会导致不可预期的副作用。
设置master
在master数据库上,苏南大叔需要执行一条sql语句,增加一个新的定制用户user,并指定这个用户的IP归属为slave。同时给这个user设置一个密码,密码是明文,请尽量尽量复杂。在这条授权语句中,有用户名/密码/IP。这三大要素,是需要slave所知晓的。那么,请记住你设置的这些信息。
GRANT REPLICATION SLAVE ON *.* TO user@'192.168.1.9' IDENTIFIED BY '1111111111111111';
flush privileges;当然这条sql语句,是需要找个地方来执行的。苏南大叔选择的是mysql命令行。可以通过下面的方式进入mysql命令行。
mysql -uroot -p输入密码之后,就可以执行上述sql语句了。
设置master的my.cnf文件
当然,找个my.cnf文件,在window下可能就是my.ini了。但是,苏南大叔的测试机是centos7.5,所以找的是my.cnf文件。这个文件的位置是:/etc/my.cnf。
log-bin = mysql-bin
binlog_format = ROW
server-id = 1这些设置项目,可能已经存在了,如果存在,那么大家直接修改即可,重启mysql生效。苏南大叔很懒,所以直接reboot了。
重启完成后,要进入mysql命令行,检测一下,相关配置是否生效。
mysql -uroot -p
show variables like 'binlog_format';苏南大叔的期待值是:ROW。
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW |
+---------------+-------+
1 row in set (0.01 sec)然后执行mysql语句如下:
FLUSH TABLES WITH READ LOCK;
RESET MASTER;查看一下下面语句中的File和Position值。记下了这些值留用。
SHOW MASTER STATUS\G;*************************** 1. row ***************************
File: mysql-bin.000001
Position: 154
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)开放master的3306端口
因为slave要靠这个端口号进行通信,所以,请在master上开启3306端口号。苏南大叔是在宝塔面板里面的安全选项卡里面操作的。
slave数据库设置
把master数据库中的sql文件导入到slave数据库中。然后,设置下面的信息。
首先要设置slave的/etc/my.cnf文件。
binlog_format = mixed
server-id = 2
replicate-do-db = newsn.net
slave-skip-errors=1032,1062,126,1114,1146,1048,1396重要的地方就是server-id,找个要设置为2。而且参与同步的数据库名字replicate-do-db要设置好。
接下来,需要在从库中执行下面的特殊sql语句了。
CHANGE MASTER TO
MASTER_HOST='192.168.1.1',
MASTER_USER='user',
MASTER_PASSWORD='11111111111111',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154;上面的语句中,一共有五条配置项目,大家一定要替换成自己的实际值。
MASTER_HOST、MASTER_USER、MASTER_PASSWORD这三条是Master上面的用户设置。- 最后两个
MASTER_LOG_FILE和MASTER_LOG_POS,来源于master的最后一步sql语句的查询结果。
start slave;查看错误日志
在slave上面,可以使用下面的sql语句,来查询数据库的同步状态。语句如下:
SHOW SLAVE STATUS\G;会返回下面的类似结果,具体的需要注意查看里面的Last_IO_Error这个项目,会有写出具体的报错信息的。一般可能就是用户名/密码/ip/端口号之类的设置错误,大家可以根据提示内容,具体修改调试。
重启生效。
相关链接
- 《利用my.cnf文件固化mysql的相关设置》 https://newsn.net/say/mysql-mycnf-setting.html
总结
这种设置之后,master库中,关于newsn.net这个数据库名的数据,都会被同步到slave中。本文中的数据库配置,只能叫做主从分离,并不是传统意义上的读写分离。如果要配置读写分离,还又很多更多更高深的配置方式。
如果想知道更多的mysql读写分离的相关设置,请点击苏南大叔的后续文章,感谢您的阅读。

