本文将介绍如何为Joomla系统使用的mysql数据库配置主从服务器。在大型的项目中,使用主从复制,可以很好的改善系统的性能,以及增加系统的稳定性。
1,主从服务器的作用
- 做数据的热备,作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失。
- 架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的评率,提高单个机器的I/O性能。
- 读写分离,使数据库能支持更大的并发。在报表中尤其重要。由于部分报表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后台实现读写分离了。
评论 (0)