MySQL数据库主从(一主多备)

[!NOTE]

MySQL主从(一主多备)为付费功能,如需使用该功能,请联系客服购买。

另外,Redis6也支持主从集群,请参见:《Redis主从集群

一、介绍

基于MySQL-5.7实现的数据库主从集群,其用途主要体现在两方面:

1.1 主从复制

建立一个和主数据库完全一样的数据库环境,称为从数据库。主数据库一般是实时的业务数据库,从数据库的作用和使角场合一般有:

  1. 作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作;

  2. 可在从数据库作备份、数据统计等工作,这样不影响主数据库的性能。

1.2 读写分离

指读与写分别使用不同的数据库,读和写数据库是部署在不同服务器上;一般读写的数据库环境配置为,一个写入的数据库,一个或多个读的数据库,各个数据库分别位于不同的服务器上,充分利用服务器性能和数据库性能;因此会涉及到如何保证读写数据库的数据一致性,这时就可以通过主从复制技术来实现了。

二、应用场合

业务吞吐量很大,读数据库(可简单理解为的比例和影响)的负载较大。

三、MySQL主从部署方法(一):无快照功能

此法适用于没有快照备份功能的主机,在这种情况下部署主从,主库需要短暂停止服务(即闭关状态)。

步骤1:部署主库服务

如果在A主机上未部署主库,请先部署主库mysql57001_master,注意,主库请务必开启二进制日志

image-20240920103025618

部署完成后,将主库服务关闭:

步骤2:打包主库mysql目录

打开文件管理,进入主库mysql57001_master的数据目录,将mysql目录打包:

image-20240919175116821

image-20240919175250280

步骤3:重启主库服务

点击主库的“更多”按钮,选择“重启”:

image-20240919175441797

步骤4:部署从库服务

在B主机部署一个服务名称为mysql57001_slave的数据库服务,并配置主从集群。

image-20221107110758735

从库也需要开启二进制日志

image-20240920112709429

如果主库与从库在同一个集群里,这里只需填写主库的服务名称即可,其它内容留空!

image-20221107110851127

首次部署从库会出现报错提示,此时无需理会提示,按以下步骤继续进行即可。

步骤5:用主库的打包文件覆盖从库文件

用文件管理器将主库打包文件复制到B主机的mysql57001_slave目录下。

复制文件:

image-20240920105520874

切换主机,进入相应目录粘贴文件:

image-20240920105659818

解压文件:

image-20240920105904677

解压时勾选覆盖现有文件:

image-20240920105939905

步骤6:重启从库服务

image-20240920110435049

至此,MySQL主从部署完成!

四、MySQL主从部署方法(二):有快照功能

此法适用于有快照备份功能的主机,在这种情况下部署主从,主库无需停止服务,业务持续可用。

基本步骤与上述基本一致,不同在于主库和从库都开启快照备份功能,并且主库文件是从快照备份中获取,将文件直接复制到从库目录即可。

步骤1:部署主库服务

如果在A主机上未部署主库,请先部署主库mysql57001_master,注意,主库请务必开启二进制日志

image-20240920103025618

数据备份里面开启快照备份

image-20240920122712269

等待服务部署完成后,点击"执行快照备份":

image-20240920152314378

步骤2:部署从库服务

在B主机部署一个服务名称为mysql57001_slave的数据库服务,并配置主从集群。

image-20221107110758735

从库也需要开启二进制日志

image-20240920112709429

开启快照备份

image-20240920122712269

如果主库与从库在同一个集群里,这里只需填写主库的服务名称即可,其它内容留空!

image-20221107110851127

首次部署从库会出现报错提示,此时无需理会提示,按以下步骤继续进行即可。

步骤3:用主库的快照备份文件覆盖从库文件

用文件管理器将主库快照备份文件mysql复制到B主机的mysql57001_slave目录下。

复制主库的快照备份里面的mysql文件:

image-20240920153713613

切换主机,进入相应目录,把从库原先的mysql目录改名:

image-20240920153921516

改名为mysql_old

image-20240920154207450

点击粘贴按钮,将主库的备份文件mysql粘贴到该目录下:

image-20240920154409582

步骤4:重启从库服务

image-20240920110435049

至此,MySQL主从部署完成!

五、主从复制的测试方法

首先在主数据库添加一个测试数据库test001

image-20221024114800926

然后打开文件管理,进入从数据库的数据文件目录,查看是否存在test001,如存在,则说明数据库主从已生效

image-20221024114945105

此时,我们就能轻松实现以下两个应用场景:

  • 作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作;

  • 可在从数据库作备份、数据统计等工作,这样不影响主数据库的性能。

六、读写分离的简单应用

数据库读写分离,其实是需要业务系统程序的支持,如果您的业务系统程序本身不支持数据库读写分离,那也是没有作用的。

本次演示中我们采用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的数据库读写分离设置完毕!

Copyright © www.urlos.com 2021 all right reserved,powered by Gitbook文档最近一次修订时间: 2024-09-20

results matching ""

    No results matching ""