MySQL主从(主主)复制与读写分离

一、MySQL主从复制与读写分离

(一)概述

1.实际架构

2.主从复制原理

注意:主从服务器时间相同。

(二)MySQL主从复制(主主)

从MySQL于主MySQL中读出主MySQL的日志到从MySQL中的relay日志中,然后从MySQL通过relay日志恢复自己的数据库。通过此种方法来做到从MySQL中的数据库和主的完全一样。

下面是主从复制!

主主复制其实就是:两次主从复制。

就是在两台服务器AB上做如下的操作。

实现A为主,B为从。

再次实现B为主,A为从。

1.实验环境

两台MySQL服务器,每一台都能够正常启动MySQL并正常连接。

2.时间同步

(1)更改时区

修改时区为北京所在时区。

tzselect

(2)同步网络时间

尝试远程同步时间

[[email protected] ~]# ntpdate -u  ntp.api.bz

11 Oct 10:50:48 ntpdate[2345]: adjust time server 114.118.7.161 offset 0.194516 sec

3.修改主MySQL的配置文件

vim  /etc/my.cnf

第一个红框表示允许从MySQL服务器于本机复制更新日志。

第二个红框为主MySQL的ID,多个MySQL不冲突就行。

重启服务

service mysqld restart

4.主MySQL创建授权账户

mysql> GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'192.168.8.%' IDENTIFIED BY 'sutang';

更新账户信息表

mysql> FLUSH PRIVILEGES;

查看主的状态

5.修改从MySQL的配置文件

vim  /etc/my.cnf

第一个红框为中继日志的设置

第二个红框为服务器ID

6.从MySQL设置连接

 

mysql> CHANGE MASTER TO MASTER_HOST='192.168.8.116',MASTER_USER='myslave',MASTER_PASSWORD='sutang',MASTER_LOG_FILE='mysql-bin.000004',MASTER_LOG_POS=337;

上述中的MASTER_LOG_FILE和MASTER_LOG_POS的值为主MySQL中执行(mysql> show master status;)查看的结果。

启动从MySQL设置

mysql> START SLAVE;

查看结果

mysql> SHOW SLAVE STATUS\G;

*************************** 1. row ***************************

               Slave_IO_State: Waiting for master to send event

                  Master_Host: 192.168.8.116

                  Master_User: myslave

                  Master_Port: 3306

                Connect_Retry: 60

              Master_Log_File: mysql-bin.000004

          Read_Master_Log_Pos: 337

               Relay_Log_File: relay-log-bin.000002

                Relay_Log_Pos: 253

        Relay_Master_Log_File: mysql-bin.000004

             Slave_IO_Running: Yes

            Slave_SQL_Running: Yes

....

7.测试

(1)主MySQL中创建一个数据库

mysql> create database mm;

Query OK, 1 row affected (0.00 sec)

(2)从MySQL查看数据库

(三)MySQL读写分离

架构:

一台变形虫服务器,两台MySQL服务器。

一台MySQL服务器做用于读的服务器。

另一台MySQL服务器做用于写的服务器。

实际生产环境多采用主MySQL服务器作写,从MySQL服务器作读。(主从复制结构)

                                     或主MySQL服务器作写,主MySQL服务器作读。(主主复制结构)

变形虫软件思想:

当收到命令时,根据命令分发给不同池处理。当该池有存活服务器,就能够执行。

池的在amoeba/conf/amoeba.xml下中这几行设置。

设变形虫IP为192.168.8.100

192.168.8.222:select ….                          #该命令交给readPool池中的MySQL服务器处理

192.168.8.222:insert ….                          #该命令交给writePool池中的MySQL服务器处理

192.168.8.222:show …                                      #该命令交给defaultPool池中的MySQL服务器处理

注意:192.168.8.100:select…              #该命令其实是交给了defaultPool池

1.实验环境

主从复制结构的MySQL服务器两台。

主MySQL:192.168.8.116

从MySQL:192.168.8.115

2.时间同步

三台服务器都同步为同一时间。

(1)更改时区

修改时区为北京所在时区。

tzselect

(2)同步网络时间

尝试远程同步时间

[[email protected] ~]# ntpdate -u  ntp.api.bz

11 Oct 10:50:48 ntpdate[2345]: adjust time server 114.118.7.161 offset 0.194516 sec

3.安装Java环境

在变形虫服务器上安装Java环境

(1)删除原有Java环境

查询原有Java包

[[email protected] ~]# rpm -qa  | grep java

tzdata-java-2013g-1.el6.noarch

java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64

java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64

卸载Java包

[[email protected] ~]# rpm -e --nodeps tzdata-java-2013g-1.el6.noarch

[[email protected] ~]# rpm -e --nodeps java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64

[[email protected] ~]# rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64

(2)安装Java

[[email protected] ~]# wget http://192.168.200.2/soft/jdk-6u14-linux-x64.bin

[[email protected] ~]# chmod +x jdk-6u14-linux-x64.bin

[[email protected] ~]# ./jdk-6u14-linux-x64.bin

[[email protected] ~]# mv jdk1.6.0_14/  /usr/local/jdk1.6

(3)修改环境变量

vim  /etc/profile

在末尾添加如下内容:

export JAVA_HOME=/usr/local/jdk1.6

export CLASSPATH=$CLASSPATH:$JAVA_HOME/bin:$JAVA_HOME/jre/lib

export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin:$PATH:$HOME/bin

更新环境变量

[[email protected] ~]# source /etc/profile

(4)测试Java

[[email protected] ~]# java -version

java version "1.6.0_14"

Java(TM) SE Runtime Environment (build 1.6.0_14-b08)

Java HotSpot(TM) 64-Bit Server VM (build 14.0-b16, mixed mode)

[[email protected] ~]#

4.安装变形虫

(1)安装

[[email protected] ~]# wget http://192.168.200.2/soft/amoeba-mysql-binary-2.2.0.tar.gz

[[email protected] ~]# mkdir /usr/local/amoeba

[[email protected] ~]# tar zxf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/

[[email protected] ~]# chmod -R 755 /usr/local/amoeba/

(2)修改环境变量

vim  /etc/profile

在末尾添加如下内容:

export AMOBEA_HOME=/usr/local/amoeba

export PATH=$PATH:$AMOEBA_HOME/bin

更新环境变量

[[email protected] ~]# source /etc/profile

5.修改变形虫配置文件

[[email protected] ~]# vim /usr/local/amoeba/conf/amoeba.xml

设置端口

创建连接本机的账户

设置本机用于连接的IP(设置为本机的eth0网卡的IP)

设置读写池

6.修改变形虫的数据库连接配置文件

[[email protected] ~]# vim /usr/local/amoeba/conf/dbServers.xml

(1)设置连接MySQL使用的账户

(2)设置主MySQL的IP

(3)设置从MySQL的IP

如果这“从MySQL”有多个的话,再如下面所示写另一个slave2

(4)设置从MySQL池

7.MySQL服务器授权账户

该授权账户用于变形虫服务器连接。

在MySQL服务器上执行如下命令:

(1)授权

mysql> grant all on *.* to [email protected]'192.168.8.113' identified by '123456';

Query OK, 0 rows affected (0.00 sec)

(2)更新授权

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

8.启动变形虫并测试

[[email protected] ~]# /usr/local/amoeba/bin/amoeba start

可以在MySQL服务器上查看到连接情况

利用Centos连接测试

在测试机上安装MySQL的客户端。

(1)读测试

关闭主MySQL

连接测试:

使用mm数据库,并查询其中user表数据

写测试

(2)写测试

关闭从MySQL,开启主MySQL

连接数据库

查询mm数据库中的表

向user中插入数据

主MySQL中本地查询数据库测试:

上面为插入前与插入后的查询结果。