订阅本站
收藏本站
微博分享
QQ空间分享

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

lilin 分类:数据库 时间:2019/11/29 17:31:37 评论: 加入收藏

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

 

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

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

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

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;

Debian<a href=http://8u.hn.cn/linuxsev/ target=_blank class=infotextkey>服务器</a>设置MariaDB数据库主从复制(Master-Slave)

现在不要退出,记下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;

 

第四步、从服务器与主服务器连接

登录从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=217118,

-> 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就表示主从复制在正常运行。

Debian<a href=http://8u.hn.cn/linuxsev/ target=_blank class=infotextkey>服务器</a>设置MariaDB数据库主从复制(Master-Slave)

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

MariaDB [(none)]> stop slave;

 

TAG:

文章评论

留言与评论(共有 0 条评论)
   
验证码: