即使在一些IT人听到“ 数据库复制 ”,他们往往与需要具有相同信息的多个副本,以避免硬件故障或数据损坏的情况下丢失数据的关联。 虽然这在某种程度上是真实的,但是数据库复制远远超过了备份数据库和数据可用性的常见概念。
CentOS / RHEL 7和Debian 8中的MariaDB主从复制
在主从设置中的数据库复制的其他好处包括:
- 备份可以在从服务器上完成,而不会影响主机中的写操作(并受其影响)。
- 可以在从设备上执行资源密集型操作(例如数据分析),而不会影响主设备的性能。
在这篇文章中,我们将解释如何设置主从复制的MariaDB的10.1。 相对于经典的复制,MariaDB的推出全球交易的ID(GTIDs)在V10.0的概念,它允许改变一个从连接到和复制从不同的易于掌握。 此外,从站的状态以崩溃安全的方式记录(状态的更新在与数据的更新相同的事务中完成)。
如果您正在寻找下的CentOS / RHEL 6 MySQL复制,按照本指南安装的MySQL(主从)复制在CentOS / RHEL 6
在CentOS / RHEL 7和Debian 8中安装MariaDB 10.1
我们的测试环境包括以下机器(都是CentOS的七 ):
Master: 192.168.0.18 Slave: 192.168.0.19
要安装最新版本的MariaDB,我们需要将它们的存储库添加到我们的服务器。 如果您使用的是旧版本的MariaDB 5.5,请考虑使用下面的文章升级到最新的10.1版本。
在CentOS / RHEL
创建一个文件名为MariaDB.repo
内/etc/yum.repos.d与主 , 从系统的下列内容:
# MariaDB 10.1 CentOS repository list - created 2016-01-23 14:16 UTC # http://mariadb.org/mariadb/repositories/ [mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.1/centos7-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
保存文件并使用yum在两台服务器上安装MariaDB:
# yum update && yum install MariaDB-server MariaDB-client
在Debian / Ubuntu
添加验证软件包和MariaDB存储库的密钥:
# apt-get install software-properties-common # apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db # add-apt-repository 'deb [arch=amd64,i386] http://mirror.edatel.net.co/mariadb/repo/10.1/debian jessie main'
注 :在上面的突出显示的行替换版本的名称和代号 。
安装使用apt-get命令:
# apt-get update # apt-get install mariadb-server
在主从服务器上检查MariaDB版本
一旦你已经安装MariaDB的,运行mysql_secure_installation
上主机和从机的程序,让我们建立了一个样本测试数据库中的老爷机。
在主服务器上设置示例MySQL数据库
现在,我们将设立在主服务器中的Employees
从https://github.com/datacharmer/test_db数据库(它提供400万条记录分布在六个表的数据集)中的两个简单的步骤:
克隆存储库并使用它将示例数据库导入到MariaDB安装:
# git clone https://github.com/datacharmer/test_db # cd test_db # mysql < employees.sql
在主服务器上配置MySQL服务器
要配置主服务器,请按照下列步骤操作:
第1步:编辑/etc/my.cnf
文件。 根据[mysqld]
部分中,添加以下四行:
log-bin server_id=1 replicate-do-db=employees bind-address=192.168.0.18
并重新启动MariaDB:
# systemctl restart mariadb
第2步:登录到MariaDB的服务器根目录,创建用户Minion,分配必要的补助:
MariaDB [(none)]> CREATE USER 'slave'@'localhost' IDENTIFIED BY 'SlavePassword'; MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO slave IDENTIFIED BY 'SlavePassword' WITH GRANT OPTION; MariaDB [(none)]> FLUSH PRIVILEGES; MariaDB [(none)]> FLUSH TABLES WITH READ LOCK; MariaDB [(none)]> SHOW MASTER STATUS;
最后一个命令(SHOW MASTER STATUS)返回二进制日志中的当前位置(精确坐标指示正好这一点从应该从复制:
配置MySQL主机进行复制
第3步:退出MariaDB的提示(与exit;
),并使用以下命令采取员工数据库的快照。 当你打回车后 ,系统会提示您输入您之前设置过root用户的密码mysql_secure_installation
:
# mysqldump -u root -p employees > employees-dump.sql
转储完成后,再次连接到数据库服务器以解锁表,然后退出:
MariaDB [(none)]> UNLOCK TABLES; MariaDB [(none)]> exit;
第4步:将转储复制到从站:
# scp employees-dump.sql root@192.168.0.19:/root/
第5步:运行mysql_upgrade
过程升级系统表(会提示你输入MariaDB的root密码):
# mysql_upgrade -u root -p
第6步:允许通过防火墙数据库服务:
# firewall-cmd --add-service=mysql # firewall-cmd --add-service=mysql --permanent # firewall-cmd --reload
现在让我们配置从站。
在从设备上配置MySQL服务器
要配置从站,请按照下列步骤操作:
第1步:创建帐号执行复制任务。 使用以下命令连接到本地MariaDB服务器:
# mysql -u root –p
并输入您之前设置的密码。
第2步:一旦连接到数据库服务器,创建用户和一个空的数据库,并授予权限:
MariaDB [(none)]> CREATE DATABASE employees; MariaDB [(none)]> GRANT ALL PRIVILEGES ON employees.* TO 'slave'@'localhost' WITH GRANT OPTION; MariaDB [(none)]> FLUSH PRIVILEGES;
第3步:退出MariaDB的提示,并加载在主服务器中创建的转储:
# mysql -u root -p employees < employees-dump.sql
第4步:编辑/etc/my.cnf
文件到服务器ID分配给下的Minion[mysqld]
部分。 需要注意的是它需要比1不同的整数,如我们在主用1:
server_id=2 replicate-do-db=employees
重新启动数据库服务器:
# systemctl restart mariadb
第5步:运行mysql_upgrade
过程升级系统表(会提示你输入MariaDB的root密码):
# mysql_upgrade -u root -p
第6步:一旦转储已导入的Minion,我们只有几步,开始复制。 登录到数据库并在MariaDB提示符中运行以下命令。 要特别注意的MASTER_LOG_FILE
和MASTER_LOG_POS
变量,应在“配置大师”上述第2步匹配SHOW MASTER STATUS返回的值。
MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='192.168.0.18', MASTER_USER='slave', MASTER_PASSWORD='SlavePassword', MASTER_PORT=3306, MASTER_LOG_FILE='master-bin.000001', MASTER_LOG_POS=314, MASTER_CONNECT_RETRY=10, MASTER_USE_GTID=current_pos;
STEP 7:启动Minion,检查其状态,但不退出MariaDB的提示:
MariaDB [(none)]> START SLAVE; MariaDB [(none)]> SHOW SLAVE STATUS\G;
不是现在你需要这个,但请注意,你可以停止Minion:
MariaDB [(none)]> STOP SLAVE;
如果SHOW SLAVE STATUS\G;
命令返回的任何错误。 使用这些错误进行故障排除,然后运行START SLAVE;
再次测试。
测试MySQL / MariaDB数据库复制
让我们记录添加到主服务器中的员工表:
MariaDB [(none)]> INSERT INTO employees (emp_no, birth_date, first_name, last_name, gender, hire_date) VALUES (500000, '1983-07-12', 'Dave', 'Null', 'M', '2014-12-12');
然后验证此更改是否已复制到从属:
MariaDB [(none)]> USE employees; MariaDB [(none)]> SELECT * FROM employees WHERE emp_no=500000;
检查MariaDB MySQL数据库复制
如您所见,复制在主机到从机正常工作。
概要
在这篇文章中,我们已经解释了如何在CentOS的/ RHEL 7和Debian 8安装最新版本的MariaDB的,并讨论了如何建立与GTIDs主从复制。 欲了解更多信息,您可能要参考MariaDB的复制指南 ,不要犹豫,使用下面的表格与我们联系,如果您有任何问题或意见。