MariaDB主从复制
MariaDB主从复制允许在多个服务器上实现数据的异步复制,可有效提升数据库的负载能力,也是实现读写分离方案的基础,是一种常用的HA方案。
环境说明
主库服务器: 192.168.71.151,CentOS 7,MariaDB 10已安装,无应用数据。
从库服务器1: 192.168.71.152,CentOS 7,MariaDB 10已安装,无应用数据。
从库服务器2: 192.168.71.153,CentOS 7,MariaDB 10已安装,无应用数据。
3个服务器的MariaDB都正常运行。
MariaDB 10服务器的常规安装配置可参照《MariaDB 10安装说明》。
各个服务器的共同配置
以下操作在各个数据库服务器配置文件的[mysqld]
部分下执行,数据库配置文件路径假定为 /etc/my.cnf 。
/etc/my.cnf 中有关于主从配置的一些说明,见my.cnf中# Replication Master Server (default)
和# Replication Slave (comment out master section to use this)
部分。
打开各个数据库服务器的配置文件 my.cnf
- 检查确保各个服务器的
skip-networking
这行是注释掉的。主从复制需要数据库服务器使用IP监听的方式,不然使用UNIX socket方式监听,其他服务器访问不到。 - 把bind-address指定为各个服务器网卡的绑定IP上。即在配置文件的
#skip-networking
行后面添加bind-address=192.168.71.x
,在192.168.71.151上配置为bind-address=192.168.71.151
,在192.168.71.152上配置为bind-address=192.168.71.152
,在192.168.71.153上配置为bind-address=192.168.71.153
。 - 配置server_id。server_id值为1到2的32次方-1的整数,每个服务器都需要添加server_id配置,各个服务器的server_id需要保证唯一性互不相同,实践中通常设置为服务器IP地址的最后一位,即分别设置为
server_id=151
,server_id=152
,server_id=153
。
上述配置完后调用service mysql reload
重新加载配置文件。
配置 主服务器
以下操作在主服务器192.168.71.151的/etc/my.cnf上进行。
确保log-bin
是启用的
即log-bin=mysql-bin
是非注释状态的,log-bin没指定存储目录,则是默认datadir指向的目录,可登录MariaDB shell通过如下命令查看:
创建帐号并赋予replication的权限
从库 从主库复制数据时需要使用这个帐号进行
查看主库binary log的文件位置
主库锁表操作,不让数据库进行写入操作
12MariaDB [(none)]> FLUSH TABLES WITH READ LOCK;Query OK, 0 rows affected (0.00 sec)记录主库log文件及其当前位置
123456MariaDB [(none)]> SHOW MASTER STATUS;+------------------+----------+--------------+------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |+------------------+----------+--------------+------------------+| mysql-bin.000002 | 326 | | |+------------------+----------+--------------+------------------+
记住File和Position的部分,后面会用到
- 保持当前MariaDB shell终端处于打开状态
即保持主库处于锁定状态,如果关闭MariaDB shell会导致主库恢复非锁定状态 - 备份主库已有数据并导入从库
如果主库中有数据需要先备份并导入到从库中。使用新的终端窗口或终端模拟器Tab ssh登录192.168.71.151服务器,执行如下语句进行数据库备份操作1[root@localhost ~]# mysqldump -uroot -p --all-databases > databases.sql
解锁 主库
数据备份完成后,就可以释放主库上的锁:
在 从服务器 上的操作
以下操作需要在从库192.168.71.152和192.168.71.153上都执行。
导入备份的主库数据
|
|
设置relay-log
my.cnf文件中添加一行relay_log=relay-bin
如果不设置,默认是按主机名 + “-relay-bin”生成relay log。
设置主从复制
|
|
这个命令完成以下几个任务:
- 设置当前服务器为192.168.71.151的从库
- 提供当前数据库(从库)从主库复制数据时所需的用户名和密码,即上面的
GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'192.168.71.%' IDENTIFIED BY 'bigs3cret';
设置的 - 指定从库开始复制主库时需要使用的日志文件和文件位置,即上面主库执行
SHOW MASTER STATUS;
显示结果中的File和Position
开启主从复制
|
|
查看从库状态
|
|
结果中Slave_IO_Running
和Slave_SQL_Running
必须为Yes
,如果不是,需要根据提示的错误修改。
测试主从复制是否正常
在主库192.168.71.151的MariaDB shell上创建表或修改数据,看是否从库也跟着更新,如果跟着更新则说明正常。
例如,假定主库上有数据库 newdatabase,在主库上执行
在每个从库上执行
如上则说明主从配置成功。
参考文献
[1] https://mariadb.com/kb/en/mariadb/setting-up-replication/
[2] https://www.digitalocean.com/community/tutorials/how-to-set-up-master-slave-replication-in-mysql