- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章MySQL基于SSL协议进行主从复制的详细操作教程由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
当mysql跨越互联网进行复制时别人可以窃取到mysql的复制信息,这些信息是明文的,因此存在不安全性,这里通过ssl对复制的信息进行加密。当在客户没有固定ip而要访问服务器时,mysql要允许任意地址的访问,服务端和客户端通过证书验证可以防止暴力破解.
开始之前让我们先来回顾一下SSL协议客户端OpenSSL的安装过程: 安装openssl 。
1
2
3
4
5
6
|
mkdir
/test/setup
cd
/test/setup
tar
zxvf openssl-0.9.8b.
tar
.gz
cd
openssl-0.9.8b
.
/config
make
&&
make
install
|
开启mysql中ssl功能 登录Mysql查看 。
1
|
mysql> show variables like
'%ssl%'
;
|
1
2
3
4
5
6
7
8
9
10
11
|
+---------------+----------+
| Variable_name | Value |
+---------------+----------+
| have_openssl | DISABLED |
| have_ssl | DISABLED |
| ssl_ca | |
| ssl_capath | |
| ssl_cert | |
| ssl_cipher | |
| ssl_key | |
+---------------+----------+
|
如果mysql输出如上所述,那么继续操作开启ssl;如果不是,重新编译安装mysql,注意生成makefile时填写参数正确。 退出mysql,编辑/etc/my.cnf 在[mysqld]和[mysqldump]之间,加入下列配置信息:
1
|
ssl
|
保存后重新启动mysql,再次登录mysql 。
1
2
|
mysql -uroot -p
mysql> show variables like
'%ssl%'
;
|
1
2
3
4
5
6
7
8
9
10
11
|
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_openssl | YES |
| have_ssl | YES |
| ssl_ca | |
| ssl_capath | |
| ssl_cert | |
| ssl_cipher | |
| ssl_key | |
+---------------+-------+
|
好了,下面进入正题: mysql基于ssl复制 1、创建证书中心 在主服务器上创建证书中心 。
1
|
cd
/etc/pki/CA
|
生成私钥 。
1
|
(umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
|
生成自签证书,由于需要输入大量用户信息,因此编辑证书的配置文件,在私有的CA上创建证书要注意所有的用户信息要和CA中的一致,从国家到部门都要相同,否则会造成证书无法使用 。
1
|
vim
/etc/pki/tls/openssh
.cnf
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = CN
countryName_min = 2
countryName_max = 2
stateOrProvinceName = State or Province Name (full name)
stateOrpovinceName_default = FJ
localityName = Locality Name (eg,city)
localityName = FZ
O.organizationName = Organization Name (eg,company)
O.organizationName_default = zdz
organizationalUnitName = Organizational Unit Name (eg,section)
organizationalUnitName_default = zdz
|
生成自签证书 。
1
|
openssl req -new -x509 -key
/etc/pki/CA/private/cakey
.pem -out
/etc/pki/CA/cacert
.pem -days 3650
|
-x509是创建自签证书是需要的参数,在创建其他证书时不能加该参数 。
由于是自签证书因此要修改证书路径 。
1
|
vim
/etc/pki/tls/openssl
.cnf
|
1
2
3
4
5
6
7
8
9
|
[ CA_defalut ]
dir = /etc/pki/CA
certs = $dir/certs #存放生成证书的目录
crl_dir = $dir/crl #存放吊销证书的目录
database = $dir/index.txt #证书的索引文件
new_certs_dir = $dir_newcerts #新签的证书目录
serial = $dir/serial #序列号
crl = $dir/crl.pem
private_key = $dir/private/cakey.pem #证书中心私钥文件
|
创建证书编号 。
1
2
3
|
mkdir
certs crl newcerts
touch
index.txt
echo
00 > serial
|
2、为主服务器创建证书 服务器的名称必须固定,在申请证书时要输入服务器名称,证书和服务器名称对应 。
创建私钥 。
1
2
3
|
mkdir
/usr/local/mysql/ssl
cd
/usr/local/mysql/ssl
(
umask
077;openssl genrsa -out
/usr/local/mysql/ssl/master
.key 2048)
|
生成证书申请 。
1
|
openssl req -new -key master.key -out master.csr
|
在证书服务器上对master的证书进行签发 。
1
|
openssl ca -
in
master.csr -out master.crt -days 365
|
3、创建从服务器证书 。
1
2
|
(
umask
077;openssl genrsa -out
/usr/local/mysql/ssl/slave
.key 2048)
openssl req -new -key slave.key -out slave.csr
|
将从服务器的证书申请文件复制到证书服务器上进行签发 。
1
|
opessl ca -
in
slave.csr -out slave.crt -days 356
|
4、修改证书权限和mysql配置文件 将证书的公钥cacert.pem复制到主从服务器的目录下 。
1
2
3
4
5
6
7
8
9
|
cd
/usr/local/mysql/ssl
cp
/etc/pki/CA/cacert
.pem ./
chown
-R mysql:mysql master.crt master.key cacert.pem
chmod
600 master.crt master.key cacert.pem
vim
/usr/local/mysql/my
.cnf
ssl
ssl_ca =
/usr/local/mysql/ssl/cacrt
.pem
ssl_cert =
/usr/local/mysql/ssl/master
.crt
ssl_key =
/usr/local/mysql/ssl/master
.key
|
修改从服务器配置 。
1
2
3
4
5
6
7
8
9
|
cd
/usr/local/mysql/ssl
cp
/etc/pki/CA/cacert
.pem ./
chown
-R mysql:mysql slave.crt slave.key cacert.pem
chmod
600 slave.crt slave.key cacert.pem
vim
/usr/local/mysql/my
.cnf
ssl
ssl_ca =
/usr/local/mysql/ssl/cacrt
.pem
ssl_cert =
/usr/local/mysql/ssl/slave
.crt
ssl_key =
/usr/local/mysql/ssl/slave
.key
|
5、在主服务器上创建复制用户 。
1
2
|
grant replication slave on *.* to slave@
'192.168.216.133'
identified by
'slave'
requere ssl;
flush privileges;
|
查看主服务器当前二进制位置 。
1
|
mysql> show master status ;
|
1
2
3
4
5
6
|
+-------------------------+------------+---------------------+--------------------------+--------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------------+------------+---------------------+--------------------------+--------------------------+
| mysql-bin.000007 | 1015 | | | |
+-------------------------+------------+---------------------+--------------------------+---------------------------+
1 row in set (0.00 sec)
|
6、在从服务器上开始复制 。
1
2
3
4
5
6
7
8
9
10
11
|
change master to
master_host=
'192.168.216.132'
,
master_user=
'slave'
,
master_password=
'slave'
,
master_log_file=
'mysql-bin.000007'
,
master_log_pos=1015,
master_ssl=1,
master_ssl_ca=
' /usr/local/mysql/ssl/cacrt.pem'
,
master_ssl_cert=
'/usr/local/mysql/ssl/slave.crt'
,
master_ssl_key=
'/usr/local/mysql/ssl/slave.key'
;
start slave;
|
查看状态 。
错误1:
如果要确保证书没有问题可以通过建立测试的用户同ssl进行连接在主服务器上开一个权限很大的用户,进行ssl的登录测试 。
1
2
3
|
grant all privileges on *.* to root@
'192.168.216.133′ identified by ‘root'
require ssl;
[root@slave ssl]
# mysql -uroot -proot -h192.168.216.133 –ssl-ca=cacrt.pem –ssl-cert=slave.crt –ssl-key=slave.key
|
1
2
3
|
Warning: Using a password on the command line interface can be insecure.
ERROR 2026 (HY000): SSL connection error: ASN: before date in the future
|
这是由于虚拟的时间不正确导致 如果这时候不使用ssl方式进行连接则会报出错误 。
1
|
[root@slave ssl]
# mysql -uroot -proot -h192.168.216.133;
|
1
2
3
|
Warning: Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user ‘root'@'192.168.216.132′ (using password: YES)
|
错误2:
在配置文件中添加证书配置后执行 show variables like ‘%ssl%'显示 。
这是由于没有将证书的属主改为mysql,可以从日志中得知是无权限获取私钥 。
最后此篇关于MySQL基于SSL协议进行主从复制的详细操作教程的文章就讲到这里了,如果你想了解更多关于MySQL基于SSL协议进行主从复制的详细操作教程的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我们打算做一主两从的配置。我们的目标如下。我们有大量的传入记录,因此我们计划执行以下操作: Master - has only past 7 days records Slave 1 - as sam
我已经成功地设置了一个主从环境,它绝对可以正常工作。 我遇到的唯一问题是从表中选择计数,它们不相同但是在 5 分钟后从主选择,在从属上创建 50 行,也创建 50 行(这就是为什么我说我'我确定它工作
我有一个与 MariaDb 实例相关的业务需求,该实例应该在具有故障转移功能的主从配置中工作。 查看我看到的文档,可以配置多集群主机 (galera) 或简单的主从副本。 配置主从+故障转移有什么建议
我想将 qml 与主从界面一起使用,但我不知道如何以正确的方式将当前项目传递到详细信息 View 。主视图中的 ListView 使用 C++ 模型(QSQLTableModel 的附加组件,它工作正
我有一个主从 fragment 布局,看起来像这样: 当从 ListView 中选择一个数字时,详细 View 中的值会发生变化(即单选按钮文本发生变化)。我有以下问题:当我在 ListView 中单
当主服务器已经有大量数据时,有没有办法复制mysql。我尝试了常规方法,但很难获取MASTER_LOG_POS值。从服务器如何能够复制主服务器上先前存在的数据。 最佳答案 通常,您会从现有数据库的完整
如果主数据库出现故障,我想切换从数据库。我找到了 Master/Slave开关,但它用于读写(看起来很合乎逻辑,但不是这种情况)。你能在 zend 中给出“db failure”策略吗? 最佳答案 看
场景: 我们的架构基于 memcached,随着用户群数量的增加,我们需要将缓存复制到多个服务器。 我们可以使用repcached实用程序轻松地在两台服务器之间进行复制。 我们希望以这样的方式负载平衡
单机配置启动 Redis安装 下载地址: http://redis.io/download 安装步骤: 1: 安装gcc编译器:yum install gcc 2:
我有一些关于主从数据复制的问题,是否有机会重新同步它们,以便在主从数据中拥有相同的数据,而无需尝试在从属数据上手动添加与主数据相同的数据? 最佳答案 一种选择是对主服务器进行备份并使用它来完全替换副本
我有一个Master和一个Slave 操作系统:MySQL5.6 & RHEL 7.0 复制状态:运行良好 一切工作正常且正确我想检查数据是否在服务器之间正确复制(主到从),并在 mysqlrplsy
我是 pgbouncer 1.7 的新手,我想用主从配置来配置它。 我已经使用 repmgr 配置了 postgres 9.3 流复制,我想使用 pgbouncer 进行负载平衡和连接池,以便在主服务
我想将一个从站连接到 Master-Jenkins,但是在尝试连接时出现以下错误: [05/02/18 15:26:59] [SSH] Opening SSH connection to Key e
我在 Windows 计算机上运行 SonarQube Server 和 Jenkins 实例。 我已经创建了 Jenkins 作业来使用 SonarQube 生成代码覆盖率报告。该作业在 Linux
我有一个这个模型(它不是实际代码,为了清楚起见,我省略了 INotifyPropertyChanged 实现)。 public class Project { public Ob
我正在使用分开的主细节剑道 ui 网格。主网格位于标签条 1 (tabstrip.select(0)) 内。添加/编辑字段(用于主网格)位于首页的标签条 2 (tabstrip.select(1))
我有 5 个选项卡栏项目。第五项是 UISplitViewController。在肖像模式下,在应用程序启动时,我可以看到详细信息屏幕,而不是主屏幕。我期待着大师的到来。在横向模式下,主从细节工作正常
作为 swift 的新手,我正在尝试使用 Master View Controller,在其中我使用 JSON 阅读博客并将其存储在核心数据中。一切都很好,只是我不明白如何在向右滑动和删除时从核心数据
我正在尝试使用主从复制配置 MySQL 数据库。在我意识到必须使用此复制来设置环境之前,我已经有 2 台独立的服务器运行它们自己的 MySQL 数据库。这些服务器中的每一个的配置都完全相同。 MySQ
我有一个正在运行的 Django 应用程序。我使用的数据库后端是 PostGreSql。一切对我来说都很好。 现在我想为我的数据库创建一个主从复制,这样: 无论 master 发生什么变化,都会在 s
我是一名优秀的程序员,十分优秀!