教程栏目

joomla中文网出品的官方教程

本文将介绍如何为Joomla系统使用的mysql数据库配置主从服务器。在大型的项目中,使用主从复制,可以很好的改善系统的性能,以及增加系统的稳定性。

1,主从服务器的作用


  1. 做数据的热备,作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失。
  2. 架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的评率,提高单个机器的I/O性能。
  3. 读写分离,使数据库能支持更大的并发。在报表中尤其重要。由于部分报表sql语句非常的慢,导致锁表,影响前台服务。如果前台使用master,报表使用slave,那么报表sql将不会造成前台锁,保证了前台速度。

2,主从服务器的原理


主服务器开启二进制日志功能后,主服务器的的变更就会记录到二进制日志中。从服务器把主服务器的二进制日志读到本地的中继日志,然后利用中继日志重做变更,以此保证主从两个环境变更一致。

3,测环境的搭建


  • vmware虚拟机,centos7,mariadb 10.2.14
  • 主服务器IP:192.168.99.10
  • 从服务器A IP:192.168.99.11
  • 从服务器B IP:192.168.99.12

先前在虚拟机上已经搭建好了测试环境,详情请参考文章:02 - 安装LAMP环境 。从服务器是直接使用虚拟机的克隆功能直接克隆的,因此,数据库的版本,数据库的原始数据都是一样的。这样省去了很多问题。

4,配置主服务器


编辑my.cnf文件:vi /etc/my.cnf .(在编辑器最好先做一个备份)

#开启二进制日志:
log-bin=mysql-bin

#添加不同步数据的数据库:
binlog-ignore-db=information_schema
binlog-ignore-db=mysql 
binlog-ignore-db=performance_schema 

#也可以指定同步的数据
#binlog-do-db=hse_aq

#修改server_id,一般设置为IP的最后一位
server-id   = 10

添加一个用于同步的用户(用户名为 zmax12,密码为zmax99):

GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'zmax12'@'192.168.99.12' IDENTIFIED BY 'zmax99';
flush privileges;

用户创建成功后,我们可以在从库中使用mysql -h 192.168.99.10 -u zmax12 -p 测试能否成功 。如果不能链接,可以尝试检查主库的防火墙是否关闭。

关闭防火墙的命令:

systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
systemctl status firewalld.service #查看防火墙的状态 

5,配置从服务器


编辑my.cnf文件:vi /etc/my.cnf .(在编辑器最好先做一个备份)

#从服务器的ID
server-id=12

注意:一定要将server-id 这个设置参数写在[mysqld]下面。

6,启动主从功能


查看主库二进制日志状态,以便在从服务器选择复制开始位置。执行命令:

show master status;

 

如果没有出现这个状态,那么请重启mysql服务。执行命令:

systemctl restart mariadb

在从服务器上设置从服务器主从模式:

CHANGE MASTER TO MASTER_HOST='192.168.99.10',MASTER_PORT=3306,MASTER_USER='zmax12',MASTER_PASSWORD='zmax99',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=23985;

设置完成之后,查看同步的状态,执行命令:

SHOW SLAVE STATUS\G

 执行结果如下:

Slave_IO_State: 
                  Master_Host: 192.168.99.10
                  Master_User: zmax12
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 23985
               Relay_Log_File: mariadb-relay-bin.000001
                Relay_Log_Pos: 4
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: No
            Slave_SQL_Running: No
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 23985
              Relay_Log_Space: 245
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 0

从上面的内容可以看到:
Slave_IO_Running: No
Slave_SQL_Running: No 说明复制过程还没有开始

在从服务器上启动复制,执行命令:

START SLAVE;

再次执行 :

SHOW SLAVE STATUS\G

 发现两个状态都为YES.说明主从复制已经正常工作了。

 8,验证


 在主库的joomla系统上发布一篇文章,发现在从库的content表中也同步的增加了一篇文章。说明Joomla的主从复制已经完成了。

9,其他


如果在从服务器上访问主服务器出现问题,可以用stop slave、reset slave命令重新配置。

接下来,我们只需要开发一些配套的插件,就可以轻松的在Joomla后台实现读写分离了。

 

 

作者: 樱木花道

Joomla程序员,从J1.5到J4.x始终都在做Joomla相关开发定制工作,有超过10年行业经验,国内Joomla扩展开发商ZMAX团队的核心成员

作者网站:ZMAX程序人

评论 (0)

  • 最新在前
  • 最佳在前