mysql 基于 ssl 的主从复制

1、创建证书中心

创建证书颁发机构,首先要生成ca自己的私钥,如下:

cd /etc/pki/CA

(umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)

生成自签证书,由于需要输入大量用户信息(在私有的CA上创建证书要注意所有的用户信息需要一致,从国家到部门都要相同,否则会造成证书无法使用)

生成自签名证书

openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3650

-x509是创建自签证书是需要的参数,在创建其他证书时不能加该参数

然后创建ca所需文件,如下:

cd /etc/pki/CA

touch index.txt

echo 01 > serial

2、为master服务器创建证书

服务器的名称必须固定,在申请证书时要输入服务器的通用名称,此通用名称必须与服务器外网申请的域名相同。

创建私钥

mkdir /home/mysql/

cd /home/mysql

(umask 077;openssl genrsa -out master.key 2048)

生成证书申请文件

openssl req -new -key master.key -out master.csr

在证书服务器上对master的证书进行签发

cd /etc/pki/CA

openssl ca -in /home/mysql/master.csr -out /home/mysql/master.crt -days 365

3、创建slave服务器证书

(umask 077;openssl genrsa -out slave.key 2048)

openssl req -new -key slave.key -out slave.csr

将slave服务器的证书申请文件复制到证书服务器上进行签发

opessl ca -in slave.csr -out slave.crt -days 356

4、修改证书权限和mysql配置文件

将ca的证书cacert.pem复制到master、slave服务器的相应目录下

cd /home/mysql

cp /etc/pki/CA/cacert.pem ./

chown -R mysql:mysql /home/mysql

chmod 600 /home/mysql/*.key

修改master服务器的/etc/my.cnf配置文件:

vim /etc/my.cnf

[mysqld]

ssl_ca                  = /home/mysql/cacrt.pem

ssl_cert                = /home/mysql/master.crt

ssl_key                 = /home/mysql/master.key

修改slave服务器配置

vim /etc/my.cnf

[client]

ssl_ca                  = /home/mysql/cacrt.pem

ssl_cert                = /home/mysql/slave.crt

ssl_key                 = /home/mysql/slave.key


5、在主服务器上创建复制用户

> grant replication slave on *.* to ‘repl‘@‘192.168.%‘ identified by ‘repl‘ require ssl;

> flush privileges;

查看主服务器当前二进制位置

mysql> show master status ;

+————————-+————+———————+————————–+————————–+

| File                            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+————————-+————+———————+————————–+————————–+

| mysql-bin.000007 |     1015   |                              |                                    |                                    |

+————————-+————+———————+————————–+—————————+

1 row in set (0.00 sec)

6、在从服务器上开始复制

change master to

master_host=‘192.168.0.66‘,

master_user=‘repl‘,

master_password=‘repl‘,

master_log_file=‘mysql-bin.000007‘,

master_log_pos=1015,

master_ssl=1,

master_ssl_ca=‘/home/mysql/cacrt.pem‘,

master_ssl_cert=‘/home/mysql/slave.crt‘,

master_ssl_key=‘/home/mysql/slave.key‘;

start slave;

show slave status;


7 排错

导致lave_IO_Running 为connecting 的原因主要有以下 3 个方面:

  • 网络不通
  • 密码不对
  • pos不对

解决步骤:

  • 对于第一个问题,一般情况下都是可以排除的,也是最容易排除的。
  • 在主库上修改用来复制的用户的密码。
  • 在做chang to 的时候注意log_pos 是否跟此时主机的相同

在主机上 show master status \G ;可以查看到

8 线上实例

服务器端配置如下:

[[email protected] ~]$ cat /etc/my.cnf

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

# Settings user and group are ignored when systemd is used.

# If you need to run mysqld under a different user or group,

# customize your systemd unit file for mysqld according to the

# instructions in http://fedoraproject.org/wiki/Systemd

skip_name_resolve

open_files_limit=8192

#ssl configure

ssl_ca=/home/mysql/cacert.crt

ssl_cert=/home/mysql/mysql.crt

ssl_key=/home/mysql/mysql.key

log-bin=mysql-bin

expire_logs_days=5

server-id=1

replicate-ignore-db=mysql

replicate-ignore-db=zabbix

slow_query_log_file=/var/log/mysql/slow.log

log_queries_not_using_indexes=1

long_query_time=5

innodb_file_per_table=1

innodb_buffer_pool_size=64M

log_slave_updates

relay-log=relay-bin

relay-log-space-limit=512000000

slave-net-timeout=360

[mysql]

default_character_set=utf8

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

[[email protected] ~]$ ll /home/mysql/

总用量 16

-rw-r--r-- 1 mysql mysql 1318 6月  23 06:09 cacert.crt

-rw-r--r-- 1 mysql mysql 3715 6月  23 06:05 mysql.crt

-rw-r--r-- 1 mysql mysql  651 6月  23 06:03 mysql.csr

-rw------- 1 mysql mysql  891 6月  23 06:02 mysql.key

[[email protected] ~]$

slave端配置如下:

[[email protected] ~]$ cat /etc/my.cnf

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

# Settings user and group are ignored when systemd is used.

# If you need to run mysqld under a different user or group,

# customize your systemd unit file for mysqld according to the

# instructions in http://fedoraproject.org/wiki/Systemd

skip_name_resolve

open_files_limit=8192

#ssl configure

ssl_ca=/home/mysql/cacert.crt

ssl_cert=/home/mysql/mysql.crt

ssl_key=/home/mysql/mysql.key

log-bin=mysql-bin

expire_logs_days=5

server-id=2

replicate-ignore-db=mysql

replicate-ignore-db=zabbix

slow_query_log_file=/var/log/mysql/slow.log

log_queries_not_using_indexes=1

long_query_time=5

innodb_file_per_table=1

innodb_buffer_pool_size=64M

log_slave_updates

relay-log=relay-bin

relay-log-space-limit=512000000

slave-net-timeout=360

[mysql]

default_character_set=utf8

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

[client]

ssl_ca=/home/mysql/cacert.crt

ssl_cert=/home/mysql/mysql.crt

ssl_key=/home/mysql/mysql.key

[[email protected] ~]$

mysql> show slave status \G

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

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.0.66

Master_User: repl

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000001

Read_Master_Log_Pos: 259

Relay_Log_File: relay-bin.000002

Relay_Log_Pos: 253

Relay_Master_Log_File: mysql-bin.000001

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB:

Replicate_Ignore_DB: mysql,zabbix

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table:

Last_Errno: 0

Last_Error:

Skip_Counter: 0

Exec_Master_Log_Pos: 259

Relay_Log_Space: 403

Until_Condition: None

Until_Log_File:

Until_Log_Pos: 0

Master_SSL_Allowed: Yes

Master_SSL_CA_File: /home/mysql/cacert.crt

Master_SSL_CA_Path:

Master_SSL_Cert: /home/mysql/mysql.crt

Master_SSL_Cipher:

Master_SSL_Key: /home/mysql/mysql.key

Seconds_Behind_Master: 0

Master_SSL_Verify_Server_Cert: No

Last_IO_Errno: 0

Last_IO_Error:

Last_SQL_Errno: 0

Last_SQL_Error:

Replicate_Ignore_Server_Ids:

Master_Server_Id: 1

1 row in set (0.00 sec)

mysql>

时间: 2024-10-17 20:17:52

mysql 基于 ssl 的主从复制的相关文章

mysql基于SSL实现主从复制

mysql数据库基于SSL实现主从复制 实验环境: node1:192.168.4.61 node2:192.168.4.62 CA:192.168.4.63 node1和node2时间同步 [[email protected]~]#ntpdate 172.18.0.1 [[email protected]~]#ntpdate 172.18.0.1 [[email protected]~]#vim /etc/chrony.conf #node1和node2操作一样 [[email protect

MySQL基于SSL的主从复制、半同步复制

(一)主从复制的架构图 1.在主数据库上,每执行一个有可能引起数据库发生改变的的语句,都会记录到二进制日志文件中,并把它们保存为事件. 2.每保存一个事件,我们就通过mysql的服务器3306端口发送给另外一台服务器 3.另外一台服务器把这个事件接收下来,接收的时候先保存到本地的中继日志里面 4.然后,mysql从中继日志文件里读一个事件,然后保存到数据文件 (二)一主多从 半同步架构图 1.Master和Slave-1在同一个机房 2.Slave-2和Slave-3在其它机房 3.半同步指的是

mysql基于ssl的主从复制

当mysql/mariadb跨越互联网进行复制时别人可以窃取到mysql/mariadb的复制信息, 这些信息是明文的, 因此存在不安全性, 这里通过ssl对复制的信息进行加密  1. 创建证书中心 在主服务器上创建证书中心 cd /etc/pki/CA 生成私钥 (umask 077;openssl genrsa -out private/cakey.pem 2048) 生成自签名证书 openssl req -new -x509 -key /etc/pki/CA/private/cakey.

MySQL/MariaDB数据库基于SSL实现主从复制

前言 备份数据库是生产环境中的首要任务,有时候不得不通过网络进行数据库的复制,由于MySQL/MariaDB的主从复制是明文传送的,如果在生产环境中跨网络传送,数据的安全性就无法完全保证,为了解决这一问题,我们需要一种安全的方式进行传送,即基于SSL加密进行数据传输. 部署配置 实验拓扑 实验环境 系统环境:CentOS6.6 数据库版本:mariadb-5.5.36 #注意:主从服务器数据库版本须一致:主从服务器时间须同步 #此实验从服务器只做一组为例 配置主从复制 安装mariadb [[e

MySQL基于SSL协议的主从复制

数据对于大部分公司来说都是最重要的部分,而MySQL的服务器在同步数据时,默认是使用明文进行传输,所以接下来就来说说MySQL基于SSL协议进行密文传输数据的主从复制模式. 逻辑拓扑: 接下来的实验中Master节点服务器即使Master节点数据库服务器,同时也是CA. 环境准备: 一.主从服务器时间需要同步: [[email protected] ~]# chronyc sources 210 Number of sources = 1 MS Name/IP address         S

MYSQL5.7基于SSL的主从复制

本文档使用的是mysql版本为5.7.22,linux内核为3.10.0-862.el7.x86_64.一.首先主从复制的原理:1.master服务器的binary log(二进制)将用户输入的增删改的SQL语句通过二进制日志记录下来,并通知存储引擎提交事务.2.slave将master的binary log复制到自己的中继日志.首先,slave开启一个工作线程(I/O线程),I/O线程在master打开一个连接,然后开始Binlog dump process.Binlog dump proce

Mysql 基于GTID的主从复制及切换

参考 http://imysql.com/tag/gtid http://mysqllover.com/?p=594 Mysql 基于GTID的主从复制及切换 一.主从复制配置 两个mysql服务的my.cnf 中相关内容配置 [mysqld] #从复制数据库表设置 replicate-wild-ignore-table = mysql.%,information_schema.%,innodb.%,innodb_log.%,performance_schema.%,test.%,tmp.% #

linux下mysql基于mycat做主从复制和读写分离之基础篇

Linux下mysql基于mycat实现主从复制和读写分离1.基础设施 两台虚拟机:172.20.79.232(主) 172.20.79.233(从) 1.1软件设施 mysql5.6.39 , mycat1.6-RELEASE jdk1.7及其以上版本2.实现步骤一(mycat实现读写分离) 1.首先在两台服务器安装mysql 1.下载mysql的repo源 $ wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rp

mysql基于ssl 主从复制

#注意:主从服务器数据库版本须一致:主从服务器时间须同步 环境: centos6.6_x86_64 mysql5.1 master_ip:192.168.122.20 slave_ip:192.168.122.207 主服务器配置 [[email protected] mysql]# mkdir /mydata/binlogs [[email protected] mysql]# chown -R mysql.mysql /mydata [[email protected] mysql]# vi