需求架构
![mariadb主从复制及基于SSL复制架构.png wKioL1NaiXqTBOgtAAGdUZq9ZDA040.jpg]()
准备工作
主从服务器时间同步
|
1
2
|
*
/5
* * * * ntpdate 172.16.0.1 &>
/dev/null
|
MariaDB的安装
详见博客“MySQL初识-架构-安装-初始化-连接-管理工具-数据文件”
部署配置
主库配置
|
1
2
3
4
5
6
7
8
9
10
11
|
vi
/etc/my
.cnf
server-
id
= 1
log-bin = mysql-bin
sync_binlog = 1
=====
service mysqld start
=====
mysql -hlocalhost -uroot -p
MariaDB [mysql]> grant replication slave,replication client on *.* to
'repluser'
@
'172.16.%.%'
identified by
'replpass'
;
MariaDB [mysql]> flush privileges;
MariaDB [mysql]> show master status;
|
![主从复制同步初始_show_master_status.png wKioL1Nai5fgVvYsAAHQjGQ3S7A342.jpg]()
从库配置
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
vi
/etc/my
.cnf
server-
id
= 11
log-bin = mysql-bin
relay-log=
/data/relaylogs/relay-bin
log-slave-updates = 1
read_only = 1
=====
service mysqld start
=====
mysql -hlocalhost -uroot -p
MariaDB [mysql]> change master to master_host=
'172.16.251.123'
,master_user=
'repluser'
,master_password=
'replpass'
,master_log_file=
'master-bin.000005'
,master_log_pos=379;
MariaDB [mysql]> start slave;
MariaDB [mysql]> show slave status\G 查看从库状态
|
![主从复制同步初始_show_slave_status.png wKiom1NajRjgqUcpAAQK7ziCark469.jpg]()
验证
|
1
2
3
4
5
6
7
|
MariaDB [(none)]> create database test_for_replication;
MariaDB [(none)]> create table test_for_replication.user(
id
int not null primary key auto_increment,name char(20) not null,year int not null,classid int not null);
MariaDB [(none)]> insert into test_for_replication.user(name,year,classid) values(
'Jason Kk'
,23,2),(
'Hello Kitty'
,18,1);
MariaDB [(none)]>
select
* from test_for_replication.user;
MariaDB [(none)]> show slave status\G
|
图1
![mariadb验证主从复制同步效果01_从库数据查询.png wKioL1NajbuT5Z4mAAFp74FsT9w733.jpg]()
图2
![mariadb验证主从复制同步效果02_从库状态查询.png wKioL1NajqGCubCsAAQpXb_BfJE097.jpg]()
可以看出主从同步正常,数据无误!
基于SSL进行安全复制
生成SSL证书及私钥
主从服务器都需要获得各自的证书,具体步骤详见“图解openssl实现私有CA”
主库和从库各需的证书文件有:
![主库和从库各需的证书文件.png wKiom1NamouCh79IAAFZXip6VAQ897.jpg]()
主库配置
SSL支持状态检查:
![mariadb_ssl_配置前参数.png wKiom1NakfSy1e9LAAHZf2OCumE450.jpg]()
-
若have_ssl的值为YES,则表明SSL功能已开启使用;
-
若have_ssl的值为NO,则说明SSL功能并未编译进目前的Mariadb,需要重新编译程序;
-
若have_ssl的值为DISABLED,则表示mariadb编译时加载了SSL功能,但未启用,一般以通用二进制程序安装的Mariadb都是此值;
查看库文件:
|
1
2
3
|
ldd `
which
mysqld` |
grep
ssl
|
Mariadb编译安装完成后,就可以配置基于SSL的安全复制了
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
chown
-R mysql.mysql
/etc/master/ssl/
=====
vi
/etc/my
.cnf
[mysqld]
ssl_ca=
/etc/master/ssl/cacert
.pem
ssl_cert =
/etc/master/ssl/master
.crt
ssl_key =
/etc/master/ssl/master
.key
ssl_cipher = DHE-RSA-AES256-SHA
=====
service mysqld reload
=====
MariaDB [(none)]> show variables like
'%ssl%'
MariaDB [mysql]> grant replication slave,replication client on *.* to
'repluser'
@
'172.16.%.%'
identified by
'replpass'
require ssl;
|
![mariadb主库支持SSL.png wKioL1Nak4Sxf5k0AALjW953ZL4200.jpg]()
从库配置
|
1
2
3
4
5
|
chown
-R mysql.mysql
/etc/slave/ssl/
=====
MariaDB [mysql]> change master to master_host=
'172.16.251.123'
,master_user=
'repluser'
,master_password=
'replpass'
,master_log_file=
'mysql-bin.000010'
,master_log_pos=776,master_ssl=1,master_ssl_ca=
'/etc/slave/ssl/cacert.pem'
,master_ssl_cert=
'/etc/slave/ssl/slave.crt'
,master_ssl_key=
'/etc/slave/ssl/slave.key'
;
MariaDB [mysql]> start slave;
MariaDB [mysql]> show slave status\G
|
![mariadb_ssl复制后_从库状态信息.png wKiom1NalQDQLV_bAAfjqT5VsdY496.jpg]()
从库的另一种配置方法
|
1
2
3
4
5
6
7
8
|
vi
/root/
.my.cnf
[client]
ssl_ca =
/etc/slave/ssl/cacert
.pem
ssl_cert =
/etc/slave/ssl/slave
.crt
ssl_key =
/etc/slave/ssl/slave
.key
ssl_cipher = DHE-RSA-AES256-SHA
=====
MariaDB [mysql]> change master to master_host=
'172.16.251.123'
,master_user=
'repluser'
,master_password=
'replpass'
,master_log_file=
'mysql-bin.000010'
,master_log_pos=776,master_ssl=1;
|
验证
|
1
2
3
4
5
|
create
test
.table t1(name char(20) not null,age int not null);
show tables
for
test
;
|
![mariadb_ssl复制_数据同步验证.png wKioL1NalULhDfW5AAH56fosqLY890.jpg]()
本文转自 xxrenzhe11 51CTO博客,原文链接:http://blog.51cto.com/xxrenzhe/1403258,如需转载请自行联系原作者