千家信息网

MySQL数据库进阶篇——主从同步与读写分离

发表于:2024-10-03 作者:千家信息网编辑
千家信息网最后更新 2024年10月03日,MySQL数据库进阶篇--主从同步与读写分离主从同步实验准备总共四台虚拟机,一台应用端,一台amoeba,一台主服务器,一台从服务器​ 应用端: centos7-2(实验前已装MySQL)​ amoe
千家信息网最后更新 2024年10月03日MySQL数据库进阶篇——主从同步与读写分离

MySQL数据库进阶篇--主从同步与读写分离

主从同步

实验准备

总共四台虚拟机,一台应用端,一台amoeba,一台主服务器,一台从服务器

应用端: centos7-2(实验前已装MySQL)

amoeba: centos7-1(无MySQL)

主服务器: centos7-3(实验前已装MySQL)

从服务器: centos7-4(实验前已装MySQL)

主服务器设置

安装时间同步服务

[root@master ~]# yum install ntp -y#修改ntp配置文件[root@master ~]# vim /etc/ntp.conf      server 127.127.195.0        //本地是时钟源,195段落//    fudge 127.127.195.0 stratum 8       //设置时间层级为8//###开启服务[root@master ~]# systemctl start ntpd

修改MySQL主配置文件

[root@master ~]# vim /etc/my.cnf    server-id 10    log-bin=zhu-bin    log-slave-updates=ture    ##开启主从同步[root@master ~]# systemctl restart mysqld[root@master ~]# systemctl stop firewalld

进入数据库修改

[root@master ~]# mysql -u root -pgrant replication slave on *.* to 'myslave'@'192.168.142.%' identified by 'asd123';    #允许从服务器使用myslave账户在主服务器上进行复制操作show master status;   #查看主服务器信息mysql> mysql> show master status;+------------------+----------+--------------+------------------+-------------------+| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+------------------+----------+--------------+------------------+-------------------+| mysql-bin.000005 |      868 |              |                  |                   |+------------------+----------+--------------+------------------+-------------------+1 row in set (0.00 sec)
从服务器设置

安装同步服务客户端ntpd

[root@slave ~]# yum install ntp ntpdate -y#开启服务关防火墙[root@slave ~]# systemctl start ntpd[root@slave ~]# systemctl stop firewalld##进行时间同步[root@slave ~]# /usr/sbin/ntpdate 主服务器地址

修改MySQL主配置文件

[root@slave ~]# vim /etc/ntp.conf    server-id = 20    relay-log = relay-bin      ###同步日志文件到本地    relay-log-index = slave-bin.index    ##定义日志文件类型及名称[root@slave ~]# systemctl restart mysqld

进入数据库修改

[root@slave ~]# mysql -u root -p123123change master to master_host='192.168.142.135',master_user='myslave',master_password='asd123',master_log_file='mysql-bin.000005',master_log_pos=865;    ##授予权限start slave;###查询同步是否成功show slave status\G*************************** 1. row ***************************               Slave_IO_State: Reconnecting after a failed master event read                  Master_Host: 192.168.142.132                  Master_User: myslave                  Master_Port: 3306                Connect_Retry: 60              Master_Log_File: mysql-bin.000004          Read_Master_Log_Pos: 1633               Relay_Log_File: master1-relay-bin.000011                Relay_Log_Pos: 1126        Relay_Master_Log_File: mysql-bin.000004             Slave_IO_Running: Yes        ##IO连接            Slave_SQL_Running: Yes        ##SQL连接            ......

PS:

​ 有时候做主从同步时会遇见Slave_SQL_Running: NO的问题,以下是解决方法:

####Slave_SQL_Running: No问题解决方案MariaDB [(none)]> stop slave;                                                       MariaDB [(none)]> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE;MariaDB [(none)]> start slave; MariaDB [(none)]> show slave status\G 

至此,MySQL主从同步已经完成,下面就是开始进行动静分离


MySQL读写分离

实验准备

以下实验全部基于主从同步的基础上进行

#总共四台虚拟机,一台应用端,一台amoeba,一台主服务器,一台从服务器

应用端:centos7-2(有MySQL)

amoeba: centos7-1(无MySQL)

主服务器: centos7-3(有MySQL)

从服务器: centos7-4(有MySQL)

设置amoeba服务器

安装jdk环境(amoeba由java开发)

[root@amoeba ~]# systemctl stop firewalld.service   #关闭防火墙[root@amoeba ~]# setenforce 0[root@amoeba mnt]# cp -p jdk-6u14-linux-x64.bin /usr/local/  #移动事先准备好的jdk包[root@amoeba mnt]# cd /usr/local/[root@amoeba local]# ./jdk-6u14-linux-x64.bin       #安装jdk环境[root@amoeba local]# mv jdk1.6.0_14/ jdk1.6##配置jdk环境变量[root@amoeba local]# vim /etc/profile     export JAVA_HOME=/usr/local/jdk1.6    export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib     export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin/:$PATH:$HOME/bin    export AMOEBA_HOME=/usr/local/amoeba    export PATH=$PATH:$AMOEBA_HOME/bin[root@amoeba local]# source /etc/profile

解压、安装amoeba工具包

[root@amoeba local]# mkdir amoeba[root@amoeba local]# tar zxf /mnt/amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba   #解压事先准备好的工具包[root@amoeba local]# chmod -R 755 amoeba/    #赋予权限##检查是否安装成功[root@amoeba local]# /usr/local/amoeba/bin/amoebaamoeba start|stop     ##出现以下命令行即为成功

修改主配置文件amoeba.xml

[root@amoeba local]# vim amoeba/conf/amoeba.xml##按照下图进行修改#(增加客户机访问amoeba的账户、密码)amoeba123123---------------------------------------------------------#(开启默认池、读取池、写入池)mastermasterslaves

修改amoeba有关数据库的配置文件dbserver.xml

[root@amoeba local]# vim amoeba/conf/dbServers.xml## 按照下图进行修改#(修改amoeba访问节点服务器的账户、密码)    test    asd123-------------------------------------------------------------#(指定主、从服务器节点地址)    192.168.142.132    192.168.142.136--------------------------------------------------------------#(将从服务器划入读取地址池中)    slave

返回主、从服务器数据库中

##在主、从服务器上开放访问权限[root@slave ~]# mysql -u root -p123123     #进入主服务器数据库(从服务器与主服务器操作相同)grant all on *.* to test@'192.168.142.%'identified by 'asd123';  #开放test用户访问权限

开启amoeba服务器

[root@amoeba conf]# /usr/local/amoeba/bin/amoeba start &   #调入后台持续运行
应用客户端

​ 在安装好MySQL的前提下,输入mysql -u amoeba -p123123 -h 192.168.142.142 -P8066即可成功访问amoeba服务器。

​ 此时,进行读写操作时将使用主服务器master进行写入,使用从服务器slave进行读取。

0