背景:因为工作的关系,需要找寻实时同步数据到另外系统的服务器的数据库上,查询下来,用mariadb进行跨服务器的同步数据动作,用主从同步比较多,也比较保险
也有使用shell脚本的,定时定候的执行mysqldump的shell脚本,但是如果crontab坏掉了,或是被取消,甚至时间被更改,数据库被改动密码等等,就需要做更多的异动,
但是shell脚本还是on the table的,可以深刻的考虑一下。
下面呢,就开始这次主从同步的设置经验。
前置准备:
先要将需要同步的表格数据利用mysqldump做一个同步,再进行接下来的主从同步是能够保证新增的users能够实时的跑到另外一个服务器上去
同步命令:
(主)==> 导出数据:
mysqldump -uroot -pPassword database table > 1.sql
(从)==> 导入数据:
mysql -uroot -pPassword database < 1.sql
一、机器简介
主:192.168,60,130
从:192.168.60.129
OS版本:CentOS 7.4
mariaDB版本:5.5
二、配置主服务器
1)修改主服务器的mariadb配置文件
打开mariadb的配置文件/etc/my.cnf,在[mysqld]节点下添加如下的内容:
#表示主服务器 server-id = 1 #记录日志 log-bin=mysql-bin01 #提供数据同步服务的数据库,在此数据库下的数据可同步到从服务器中 binlog-do-db=#这里需要备份什么数据库就写什么数据库的名称 #设置在主服务器上不记录日志的数据库 binlog-ignore-db=mysql #日志过期时间 expire_logs_days=10
注意: 如果配置文件已经存在了上述的项目,覆盖原有的即可
这里需要重启一下主服务器的数据库 ==> systemctl restart mariadb,要不然配置文件的修改不生效,无法继续下面的操作
2)查看主服务器的状态
此步骤要打开数据库命令行,输入命令:
MariaDB [mysql]> show master status; +--------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +--------------------+----------+--------------+------------------+ | mysql-bin01.000004 | 1243 | tcloud | mysql | +--------------------+----------+--------------+------------------+
这部分需要记住File和Position的值,到之后的配置需要使用
3)查看log_bin的状态
数据库命令行中,输入命令:
MariaDB [mysql]> show variables like "%log_bin%"; +---------------------------------+-------+ | Variable_name | Value | +---------------------------------+-------+ | log_bin | ON | | log_bin_trust_function_creators | OFF | | sql_log_bin | ON | +---------------------------------+-------+
此部分如果log_bin是ON,即表示正常开启。
4)创建主服务器用户及权限(专门为从服务器连接创建一个用户,和分配一个权限)
MariaDB [mysql] > grant replication slave on *.* to 'mysql'@'192.168.60.129' identified by '123456'; #解释: 这里是创建了一个mysql的用户,密码为123456,连接本机的数据库地址为从服务器的IP,即只允许该用户拥有从服务器的IP访问数据库并备份表的权限
这里还要注意一点:replication 属于grant权限,后面只能用*.*,不能指定某个数据库或者某个数据表,如果指定类似select等普通权限可具体到数据表。
5) 重启主服务器的mariadb
三、配置从服务器
1) 修改配置文件
打开配置文件/etc/my.cnf,在[mysqld]节点下增加如下内容:
#表示从服务器 server-id=2 #记录日志 log-bin=mysql-bin02 #同步的数据库 replicate-do-db=#要同步的数据库 #同步的数据库指定表 replicate-do-db=#要同步的表 #不记录日志的数据库 replicate-ignore-db=mysql #日志过期时间 expire_logs_days=10
2) 打开命令行,执行一下命令,来设置master信息
change master to master_host='192.168.60.130',#主服务器地址 master_user='mysql',#主服务器数据库用户名 master_password='123456',#主服务器数据库密码 master_log_file='mysql-bin01.000004', #填写步骤2(2)中File项的值 master_log_pos=1243; #填写步骤2(2)中Position的值
3) 重启从服务器mariadb
4) 执行启动从服务器命令(在从服务器数据库命令行进行)
MariaDB [mysql] > start slave;
5) 查看slave的运行状态命令
MariaDB [mysql] > start slave;
查看User值为system user的项,如果其State值为“Waiting for master to send event”和”Slave has read all relay log: waiting for the slave I/O thread to update it“,则从服务器已连接主服务器。
6) 查看slave运行状态
MariaDB [mysql] > show slave status;
如果Slave_IO_Running的值为Yes,Slave_SQL_Running的值为Yes,则从服务器正常运行。如果不正确,查看错误日志,一般位于data目录下。
四、测试
从服务器数据库中新建数据库pension,主服务器中新建表并插入数据,查看从服务器数据库,是否存在相同的数据库表及数据。
PS:
如果以上的修改没有正常,并且在中间出现的配置文件配置的问题,则需要先在从服务器的mariadb命令行里先stop slave,然后再修改其他的问题
修改完成后,去查看一下主服务器的状态是否已经改变 show master status(重点关注File和Position参数)
如果改变了要重新记下来,然后在slave的服务器上再次执行change master to .... ==> start slave (这样的过程)