我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

苏南大叔的博客,因为要备案的缘故,所以实际上造成了两个数据库的情况。那么,在这里,苏南大叔就实践了一下:mysql的主从数据库设置,来解决这个问题。在本文中,有两台服务器的两个数据库,masterslave。服务器的mysql数据库,其实都是mariadb

苏南大叔:如何设置 mysql 的主从数据库? - mariadb
如何设置 mysql 的主从数据库?(图2-1)

两边的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语句了。

设置mastermy.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;

查看一下下面语句中的FilePosition值。记下了这些值留用。

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)

开放master3306端口

因为slave要靠这个端口号进行通信,所以,请在master上开启3306端口号。苏南大叔是在宝塔面板里面的安全选项卡里面操作的。

苏南大叔:如何设置 mysql 的主从数据库? - mysql_port
如何设置 mysql 的主从数据库?(图2-2)

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_HOSTMASTER_USERMASTER_PASSWORD这三条是Master上面的用户设置。
  • 最后两个MASTER_LOG_FILEMASTER_LOG_POS,来源于master的最后一步sql语句的查询结果。
start slave;

查看错误日志

slave上面,可以使用下面的sql语句,来查询数据库的同步状态。语句如下:

 SHOW SLAVE STATUS\G;

会返回下面的类似结果,具体的需要注意查看里面的Last_IO_Error这个项目,会有写出具体的报错信息的。一般可能就是用户名/密码/ip/端口号之类的设置错误,大家可以根据提示内容,具体修改调试。

newsn.net:这里是【评论】可见内容

重启生效。

相关链接

总结

这种设置之后,master库中,关于newsn.net这个数据库名的数据,都会被同步到slave中。本文中的数据库配置,只能叫做主从分离,并不是传统意义上的读写分离。如果要配置读写分离,还又很多更多更高深的配置方式。

如果想知道更多的mysql读写分离的相关设置,请点击苏南大叔的后续文章,感谢您的阅读。

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   mysql