如何设置 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
读写分离的相关设置,请点击苏南大叔的后续文章,感谢您的阅读。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。