这篇教程介绍如何设置简单的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;
现在不要退出,记下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就表示主从复制在正常运行。
如果主从复制出现问题,可以在状态里找出原因.停止主从复制的命令如下: MariaDB [(none)]> stop slave;
相关主题 |