Debian 8服务器设置MariaDB数据库主从复制(Master-Slave)

这篇教程介绍如何设置简单的MariaDB数据库主从复制."简单"的意思就是只有一个主服务器和一个从服务器.(one master and one slave),从服务器复制主服务器的数据.这篇教程的主服务器是Debian8 MariaDB 10.1版本,从服务器是树莓派Rapsbian Jessie系统MariaDB 10.1版本.后来在Ubuntu14.04服务器上又测试了一次,证明了只要MariaDB的版本一致,就可以按照下面的步骤实现主从复制.

MariaDB数据库主从复制的基本设置过程

MySQL和MariaDB的主从复制都依赖于二进制日志(binary log),主服务器必须开启二进制日志才能让主从复制工作.二进制日志主要用来备份数据库,恢复数据库,以及主从复制.从服务器不需要开启二进制日志,但MariaDB官方推荐在从服务器上开启二进制日志.

主从复制可以分为以下4步:

  1. 配置好主服务器(master )
  2. 配置好从服务器(slave)
  3. 将主服务器的数据库导入进从服务器
  4. 从服务器与主服务器连接,开始复制

第一步:配置主服务器(master)

编辑/etc/my.cnf文件

在主服务器上打开my.cnf配置文件,这个文件也被称为选项文件(option file).你的my.cnf文件也可能在/etc/mysql/目录下.

sudo nano /etc/my.cnf

找到[mysql]这一区域,在这一区域下面添加这5行选项.

log-bin                 = /var/log/mysql/master-bin
log-bin-index      = /var/log/mysql/master-bin.index
binlog_format       = mixed
server-id                = 1
replicate-do-db     = database_name

第一个选项log-bin的作用是启用二进制日志,并指定二进制日志文件存放在/var/log/mysql/目录下.master-bin是二进制日志文件名字的首部.

第二个选项log-bin-index指定了二进制日志索引文件的存放目录以及文件名.

第三个选项binlog_formt指定了二进制日志文件的格式为mixed(混合格式).二进制日志文件可以有3种格式:基于SQL语句的格式,基于行的格式,混合格式.混合格式是前两者的结合.在混合格式下,MariaDB优先使用基于SQL语句的格式,但当MariaDB认为一条SQL语句不适合主从复制时,它就使用基于行的格式来记录日志.

server-id用来区别主服务器和从服务器.

replicate-do-db的值是需要复制的数据库名称.如果需要复制多个数据库,那么使用多个replicate-do-db选项.比如复制两个数据库:

replicate-do-db=database_name1
replicate-do_db=database_name2

添加完以上5个选项后,保存文件,重启MariaDB数据库服务器.

sudo systemctl restart mariadb

你的my.cnf文件可能有bind-address = 127.0.0.1这个选项.bind-address = 127.0.0.1 的意思是只让MariaDB数据库服务器监听本地localhost.由于我们需要让从服务器远程登录主服务器,所以我们需要修改bind-address,将bind-address = 127.0.0.1这一行注释掉,重启MariaDB就可以了.

在主服务器上添加一个专门用于复制的用户

登录MariaDB主服务器.

mysql -u root -p

然后创建一个用户和密码,并赋予这个用户复制的权限(replication slave).

CREATE USER replication_user;

set password for replication_user = password("your-password");

grant replication slave on *.* to replication_user identified by 'your-password';

flush privileges;

从服务器将以这个用户远程登录主服务器并请求二进制日志文件.

第二步:配置从服务器

打开my.cnf配置文件.

sudo nano /etc/my.cnf

在[mysqld]区域添加如下4行选项.

server-id         = 2
relay-log-index    = /var/log/mysql/slave-relay-bin.index
relay-log         = /var/log/mysql/slave-relay-bin
replicate-do-db = database_name

当然,如果你要复制多个数据库,那么你需要添加多个replicate-do-db选项.保存文件,重启MariaDB.

sudo systemctl restart mariadb

有时候MariaDB可能会重启失败.使用systemctl status mariadb来查看MariaDB的状态.

第三步:主服务器导出数据库并导入从服务器

登录主MariaDB服务器,输入下面的命令保护数据库不再受更改.

flush tables with read lock;

然后查看master的状态.

show master status;

MariaDB数据库主从复制

现在不要退出,记下File文件名以及Postion的值.打开另外一个终端,SSH登录主服务器,然后使用mysqldump来导出数据库.

导出一个数据库

mysqldump -u root -p db1 > db1.sql

导出多个数据库

mysqldump -u root -p --databases db1 db2 db2...  > db.sql

使用scp命令将导出的sql文件传送到从服务器上,再导入进入从MariaDB数据库服务器.

在从服务器上导入数据库的命令:

mysql -u root -p < db.sql

导入完成后,在主MariaDB服务器上解开read lock.

MariaDB [(none)]> unlock tables;

第4步:从服务器与主服务器连接

登录从MariaDB服务器,运行下面的命令:

MariaDB [(none)]> change master to 
   -> master_host='master IP address',
   -> master_user='replication_user',
   -> master_password='replication_user_password', 
   -> master_port=3306,
   -> master_log_file='master-bin.000005', 
   -> master_log_pos=215109,
   -> master_connect_retry=10;

红色部分是需要更改的.注意master_log_file与master_log_pos的值就是之前show master status这条命令所给出的两个值.

然后启动slave.

MariaDB [(none)]> start slave;

查看状态.

MariaDB [(none)]> show slave status\G;

Slave_IO_Running和Slave_SQL_Running的状态都为Yes就表示主从复制在正常运行.

MariaDB数据库主从复制

如果主从复制出现问题,可以在状态里找出原因.停止主从复制的命令如下:

MariaDB [(none)]> stop slave;
为这篇文章评分
[Total: 2 Average: 3]

Leave a Reply

Your email address will not be published.

The maximum upload file size: 2 MB. You can upload: image, audio, video, document, spreadsheet, interactive, text, archive, code, other. Links to YouTube, Facebook, Twitter and other services inserted in the comment text will be automatically embedded. Drop file here