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中本地查询数据库测试:
上面为插入前与插入后的查询结果。