首先是实验环境
需要两台已经装好MySQL的Linux服务器可以是YUM安装的、二进制包安装的或者是源代码包编译的都行,然后实现这两台MySQL服务其的主从同步,咋实现同步时使用SSL加密传输,再实现双主模型。
注意:保证MySQL服务器版本一致,或者主服务器的版本低于从服务器的版本。

 

阅读示例:
    文中所有需要在终端界面输入的命令,都是用代码框的形式展现
如:

  1. ifconfig
  2. mysql> 开头的是在mysql中输入的命令

文中所有使用文本编辑器打开或者编辑配置文件的内容,都使用“引用框”来展现.配置文件中写入的内容都在引用框中用灰色字体展现。
如:

/etc/my.cnf 主服务器需要在主配置文件中修改
[mysql]下面添加

 

准备工作:
两台虚拟机:mylab1-192.168.89.11、mylab2-192.168.89.22
系统使用的是centos6.2,mysql使用的版本是5.6.4-m7

主服务器配置:

server-id 要保证和从服务器不一致
其他配置采用默认配置就可以了
配置同步帐号

  1. mysql> GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* to 'username2'@'mylab2' IDENTIFIED BY 'password';
  2. mysqldump --all-databases --single-transaction --master-data=2 > /root/all.sql

命令解释:
user_name 登录的用户名
host 从服务器的主机IP或主机名
password 登陆密码
主服务器的配置就OK了
如果主服务器是一个已经在使用中的数据库服务器,可以先做一次数据的完全备份,然后在从服务器上恢复备份后再让从服务器同步主服务器。
使用mysqldump备份是指定选项 --master-data=2 在备份文件中记录二进制文件日志的位置,从服务器同步时指定从该位置开始同步


从服务器配置:

 

/etc/my.cnf  从服务器的主配置文件修改
log-bin   一行可以注释掉 关闭二进制日志
datedir=/path 指定数据存放位置
relay_log=relay-log  开启并定义中继日志 必须启用
server-id=2 服务器ID 必须和主服务器不同
read_only = ON 从服务器只需要从主服务器上复制数据,所以把它设置成只读

 先将备份的数据库导入从服务器的数据库中

  1. mysql < all.sql
  2. mysql> CHANGE MASTER TO MASTER_HOST='mylab1', MASTER_PORT=3306,MASTER_USER='username2', MASTER_PASSWORD='password', MASTER_LOG_FILE=bin_log id', MASTER_LOG_POS=POSid;
  3. mysql> START SLAVE; 

命令解释:
MASTER_HOST=<host>  主服务器名或IP
MASTER_PORT=<port> 主服务器MySQL端口 3306可以省略
MASTER_USER=<user> 在主服务器上设置的用户名
MASTER_PASSWORD=<password> 在主服务器上设置的用户对应的密码
MASTER_LOG_FILE=bin_log id', MASTER_LOG_POS=POSid 这两项是在恢复主服务器的完全备份之后指定从哪个位置开始同步
START SLAVE;启动从服务
SHOW SLAVE STATUS;查看从服务器状态

 

OK MySQL 主从服务器模型就OK了!


使用SSL加密传输,加强数据传输安全:

注意:主从服务器都需要CA的证书,自己的证书,自己的私钥,实现互相认证

主服务器需要在主配置文件中修改
[mysql]下面添加
ssl
ssl-ca=/capath ca颁发机构的证书存放位置
ssl-cert=/path 主服务器的证书存放位置
ssl-key=/path 主服务器的密钥存放位置

mylab1为原同步帐号添加必须使用SSL加密同步,在新添加用户的时候 添加 REQUIRE SSL 指定必须使用SSL加密传输

  1. mysql> GANT USAGE ON *.* TO 'username2'@'mylab2' REQUIRE SSL;

mylab2需要先停止服务然后在CHAGE MASTER时候 指定

  1. CHANGE MASTER TO MASTER_HOST='mylab1', MASTER_PORT=3306,MASTER_USER=username2, MASTER_PASSWORD='password', MASTER_LOG_FILE=bin_log id', MASTER_LOG_POS=POSid,MASTER_SSL=1,MASTER_SSL_CA='/CA/path',MASTER_SSL_CERT='/hostcert/path',MASTER_SSL_KEY='/hostkey/path';

命令解释:
MASTER_SSL=1,
MASTER_SSL_CA='/CA文件位置',
MASTER_SSL_CERT='从服务器的证书文件的位置',
MASTER_SSL_KEY='从服务器的密钥文件的位置'
注意:CHAGE MASTER时候指定停止从服务是二进制日志文件和事件的位置
启动从服务
这样主从服务器之间的通信就加密了


实现双主模型:

实现双主模型主要的两点
一是双方都打开二进制日志和中继日志,互设为主从
二是定义自动增长的时候的起始值和增长步长

auto-increment-increment=N 定义步长
auto-increment-offset=N s定义起始值 
指定步长,应该为两个服务器设置成不同的,且不能使以后重复

mylab1

修改主配置文件/etc/my.cnf
log_bin= 二进制日志开启
relay_log= 中继日志开启
server_id=1 服务器id 主从不能相同
auto-increment-increment=2
auto-increment-offset=1

为mylab2创建同步时的用户

  1. mysql> GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* to 'username2'@'mylab2' IDENTIFIED BY 'password';

 mylab2

修改主配置文件/etc/my.cnf
log_bin= 二进制日志
relay_log= 中继日志
server_id=10 主从不能相同
auto-increment-increment=2
auto-increment-offset=2

为mylab1创建同步时的用户

  1. mysql> GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* to 'username1'@'mylab1' IDENTIFIED BY 'password' 

假设A有数据库,B没有;
(1)先在A服务器上锁定读,做完全备份,记录二进制日志文件,以及此文件事件的pos位置;
(2)应该先关闭log-bin,(也应该先记录 SHOW MASTER STATUS)把备份的内容在B服务器导入一次,再开启log-bin;

然后互设为主从

  1. mylab1指定mysql2为主服务器: 
  2. CHANGE MASTER TO MASTER_HOST='mylab2', MASTER_PORT=3306,MASTER_USER='username1', MASTER_PASSWORD='password', MASTER_LOG_FILE=bin_log id', MASTER_LOG_POS=POSid; 
  3. mylab2指定mysql1为主服务器: 
  4. CHANGE MASTER TO MASTER_HOST='mylab1', MASTER_PORT=3306,MASTER_USER='username2', MASTER_PASSWORD='password', MASTER_LOG_FILE=bin_log id', MASTER_LOG_POS=POSid; 


mylab1

MySQL主从模型,传输加密以及双主模型的实现_复制_03

 

mylab2

MySQL主从模型,传输加密以及双主模型的实现_主从_05