MySQL数据库主从(一主多备)
[!NOTE]
MySQL主从(一主多备)为付费功能,如需使用该功能,请联系客服购买。
另外,Redis6也支持主从集群,请参见:《Redis主从集群》
一、介绍
基于MySQL-5.7实现的数据库主从集群,其用途主要体现在两方面:
1.1 主从复制
建立一个和主数据库完全一样的数据库环境,称为从数据库。主数据库一般是实时的业务数据库,从数据库的作用和使角场合一般有:
作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作;
可在从数据库作备份、数据统计等工作,这样不影响主数据库的性能。
1.2 读写分离
指读与写分别使用不同的数据库,读和写数据库是部署在不同服务器上;一般读写的数据库环境配置为,一个写入的数据库,一个或多个读的数据库,各个数据库分别位于不同的服务器上,充分利用服务器性能和数据库性能;因此会涉及到如何保证读写数据库的数据一致性,这时就可以通过主从复制技术来实现了。
二、应用场合
业务吞吐量很大,读数据库(可简单理解为的比例和影响)的负载较大。
三、MySQL主从部署方法(一):无快照功能
此法适用于没有快照备份功能的主机,在这种情况下部署主从,主库需要短暂停止服务(即闭关状态)。
步骤1:部署主库服务
如果在A主机上未部署主库,请先部署主库mysql57001_master
,注意,主库请务必开启二进制日志。
部署完成后,将主库服务关闭:
步骤2:打包主库mysql目录
打开文件管理,进入主库mysql57001_master
的数据目录,将mysql
目录打包:
步骤3:重启主库服务
点击主库的“更多”按钮,选择“重启”:
步骤4:部署从库服务
在B主机部署一个服务名称为mysql57001_slave
的数据库服务,并配置主从集群。
从库也需要开启二进制日志。
如果主库与从库在同一个集群里,这里只需填写主库的服务名称即可,其它内容留空!
首次部署从库会出现报错提示,此时无需理会提示,按以下步骤继续进行即可。
步骤5:用主库的打包文件覆盖从库文件
用文件管理器将主库打包文件复制到B主机的mysql57001_slave
目录下。
复制文件:
切换主机,进入相应目录粘贴文件:
解压文件:
解压时勾选覆盖现有文件:
步骤6:重启从库服务
至此,MySQL主从部署完成!
四、MySQL主从部署方法(二):有快照功能
此法适用于有快照备份功能的主机,在这种情况下部署主从,主库无需停止服务,业务持续可用。
基本步骤与上述基本一致,不同在于主库和从库都开启快照备份功能,并且主库文件是从快照备份中获取,将文件直接复制到从库目录即可。
步骤1:部署主库服务
如果在A主机上未部署主库,请先部署主库mysql57001_master
,注意,主库请务必开启二进制日志。
在数据备份里面开启快照备份:
等待服务部署完成后,点击"执行快照备份":
步骤2:部署从库服务
在B主机部署一个服务名称为mysql57001_slave
的数据库服务,并配置主从集群。
从库也需要开启二进制日志。
开启快照备份:
如果主库与从库在同一个集群里,这里只需填写主库的服务名称即可,其它内容留空!
首次部署从库会出现报错提示,此时无需理会提示,按以下步骤继续进行即可。
步骤3:用主库的快照备份文件覆盖从库文件
用文件管理器将主库快照备份文件mysql
复制到B主机的mysql57001_slave
目录下。
复制主库的快照备份里面的mysql文件:
切换主机,进入相应目录,把从库原先的mysql
目录改名:
改名为mysql_old
:
点击粘贴
按钮,将主库的备份文件mysql
粘贴到该目录下:
步骤4:重启从库服务
至此,MySQL主从部署完成!
五、主从复制的测试方法
首先在主数据库添加一个测试数据库test001
然后打开文件管理,进入从数据库的数据文件目录,查看是否存在test001,如存在,则说明数据库主从已生效
此时,我们就能轻松实现以下两个应用场景:
作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作;
可在从数据库作备份、数据统计等工作,这样不影响主数据库的性能。
六、读写分离的简单应用
数据库读写分离,其实是需要业务系统程序的支持,如果您的业务系统程序本身不支持数据库读写分离,那也是没有作用的。
本次演示中我们采用WordPress + HyperDB插件来实现数据库读写分离操作
6.1 安装WordPress
在应用市场中安装WordPress
数据库主机请选择主数据库
然后按照正常流程完成WordPress的安装部署
5.2 安装HyperDB插件
进入WordPress后台安装HyperDB插件
用文件管理器进入WordPress插件目录,发现该文件夹内共有如下 3 个文件:
db-config.php
(该文件是插件的配置文件)
db.php
(该文件是插件的功能核心文件)
readme.txt
(该文件是插件的介绍文档)
修改db-config.php
,将其中的类似部分改成以下内容:
$wpdb->add_database(array(
'host' => 'mysql57001_master', // 主要数据库地址
'user' => 'wordpress0_3c9db',
'password' => 'V4ex41r^pGU2E^7TP7l;cUaqcHLxaGa7nQvzz6CPA',
'name' => 'wordpress0_3c9db',
'write' => 1, // 给主要数据可写入
'read' => !defined('DB_HOST_RPL1') ? 1 : 0, // 当从数据库不可用时主要数据库才可读取,如果从数据库可用则从从数据库读取。
));
if(defined('DB_HOST_RPL1')):
$wpdb->add_database(array(
'host' => 'mysql57001_slave', // 从数据库地址
'user' => 'wordpress0_3c9db',
'password' => 'V4ex41r^pGU2E^7TP7l;cUaqcHLxaGa7nQvzz6CPA',
'name' => 'wordpress0_3c9db',
'write' => 0, // 从数据库不可写入
'read' => 1, // 从数据库可读取
));
endif;
然后将db-config.php
文件复制到WordPress网站根目录:
再把db.php
文件复制到wp-content目录下:
最后修改WordPress的配置文件wp-config.php
,在define('WP_CACHE', true);
语句的前面加上define( 'DB_CONFIG_FILE', '/data/www/db-config.php' );
,用于引入db-config.php文件路径,将默认数据库引擎替换成HyperDB:
至此,WordPress的数据库读写分离设置完毕!