首先是实验环境
需要两台已经装好MySQL的Linux服务器可以是YUM安装的、二进制包安装的或者是源代码包编译的都行,然后实现这两台MySQL服务其的主从同步,咋实现同步时使用SSL加密传输,再实现双主模型。
注意:保证MySQL服务器版本一致,或者主服务器的版本低于从服务器的版本。
阅读示例:
文中所有需要在终端界面输入的命令,都是用代码框的形式展现
如:
- ifconfig
- mysql> 开头的是在mysql中输入的命令
文中所有使用文本编辑器打开或者编辑配置文件的内容,都使用“引用框”来展现.配置文件中写入的内容都在引用框中用灰色字体展现。
如:
/etc/my.cnf 主服务器需要在主配置文件中修改 |
准备工作:
两台虚拟机:mylab1-192.168.89.11、mylab2-192.168.89.22
系统使用的是centos6.2,mysql使用的版本是5.6.4-m7
主服务器配置:
server-id 要保证和从服务器不一致
其他配置采用默认配置就可以了
配置同步帐号
- mysql> GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* to 'username2'@'mylab2' IDENTIFIED BY 'password';
- mysqldump --all-databases --single-transaction --master-data=2 > /root/all.sql
命令解释:
user_name 登录的用户名
host 从服务器的主机IP或主机名
password 登陆密码
主服务器的配置就OK了
如果主服务器是一个已经在使用中的数据库服务器,可以先做一次数据的完全备份,然后在从服务器上恢复备份后再让从服务器同步主服务器。
使用mysqldump备份是指定选项 --master-data=2 在备份文件中记录二进制文件日志的位置,从服务器同步时指定从该位置开始同步
从服务器配置:
/etc/my.cnf 从服务器的主配置文件修改 |
先将备份的数据库导入从服务器的数据库中
- mysql < all.sql
- 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;
- mysql> START SLAVE;
命令解释:
MASTER_HOST=
MASTER_PORT=
MASTER_USER=
MASTER_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加密传输
- mysql> GANT USAGE ON *.* TO 'username2'@'mylab2' REQUIRE SSL;
mylab2需要先停止服务然后在CHAGE MASTER时候 指定
- 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创建同步时的用户
- 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创建同步时的用户
- 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;
然后互设为主从
- mylab1指定mysql2为主服务器:
- 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;
- mylab2指定mysql1为主服务器:
- 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
mylab2