如何在Ubuntu Linux上使用SSL设置MariaDB主从复制
如何在Ubuntu Linux 16.04 LTS服务器上使用MariaDB服务器设置主从数据复制?
如何加密复制流量,以便在传输过程中对数据进行加密,从而保护我的数据和用户免遭监听?
主从数据复制允许您将数据库复制到多个MariaDB服务器。
这对于备份,数据恢复,负载平衡等有用。
在本教程中,您将学习如何在主服务器和从服务器之间配置受SSL保护的MariaDB复制。
设置示例
在MariaDB中设置主从复制
本教程将为db1和db2服务器使用以下IP地址:
- 192.168.1.5(db1)主MariaDB服务器
- 192.168.1.6(db2)从MariaDB服务器
我将假设db1和db2都是全新的服务器。
服务器上没有现有的数据库。
设置MariaDB主从集群需要什么?
- 最少两台服务器(可以是云服务器或裸机服务器)
- 服务器之间的专用网络(LAN/VLAN)
- 如果在两个IDC之间设置,则两个数据中心之间的VPN
- 两台服务器上的Ubuntu Linux 16.04 LTS
更新您的/etc/hosts
首先在db1和db2服务器上更新/etc/hosts文件,如下所示:
$ sudo vi /etc/hosts
编辑/追加如下:
192.168.1.5 db1 192.168.1.6 db2
保存并关闭文件。
测试如下:
$ ping -c4 db1 $ ping -c4 db2
步骤1在Ubuntu 16.04 LTS上安装MariaDB最新的稳定版本
在db1和db2服务器上执行以下apt-get命令以安装MariaDB:
$ sudo apt-get install software-properties-common $ sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8 $ sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://sgp1.mirrors.digitalocean.com/mariadb/repo/10.2/ubuntu xenial main' $ sudo apt-get update $ sudo apt-get install mariadb-server mariadb-client
步骤2保护MariaDB
执行以下命令:
$ mysql_secure_installation
步骤3为MariaDB创建SSL密钥和证书
仅在db1服务器上执行以下命令(730天== 2年):
$ sudo mkdir -p /etc/mysql/ssl/ $ cd /etc/mysql/ssl/ $ sudo openssl genrsa 2048 > ca-key.pem ## set CA common name to "MariaDB admin" ## $ sudo openssl req -new -x509 -nodes -days 730 -key ca-key.pem -out ca-cert.pem ## set server certificate common name to "MariaDB server" ## $ sudo openssl req -newkey rsa:2048 -days 730 -nodes -keyout server-key.pem -out server-req.pem $ sudo openssl rsa -in server-key.pem -out server-key.pem $ sudo openssl x509 -req -in server-req.pem -days 730 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem ## set client common name to "MariaDB client" ## $ sudo openssl req -newkey rsa:2048 -days 730 -nodes -keyout client-key.pem -out client-req.pem $ sudo openssl rsa -in client-key.pem -out client-key.pem $ sudo openssl x509 -req -in client-req.pem -days 730 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem $ sudo openssl verify -CAfile ca-cert.pem server-cert.pem client-cert.pem
为避免出现任何问题,必须将它们通用命名如下:
- CA通用名称:MariaDB管理员
- 服务器通用名称:MariaDB服务器
- 客户端通用名称:MariaDB客户端
还将所有证书复制到db2从服务器:
$ ssh user@db2 mkdir /tmp/ssl/ $ cd /etc/mysql/ssl/ $ scp * user@db2:/tmp/ssl/
步骤4配置主MariaDB服务器
在db1主服务器上执行以下命令。
您需要编辑/etc/mysql/my.cnf文件,运行:
$ sudo vi /etc/mysql/my.cnf
配置MariaDB客户端(在[client]部分中添加)以使用SSL:
ssl-ca=/etc/mysql/ssl/ca-cert.pem ssl-cert=/etc/mysql/ssl/client-cert.pem ssl-key=/etc/mysql/ssl/client-key.pem
设置绑定地址,即仅侦听db1的专用IP地址192.168.1.5(确保将IP 192.168.1.5替换为实际IP地址)
bind-address = 192.168.1.5
将此服务器标记为主服务器。
此数字必须是唯一的:
server-id = 1
确保服务器启用了二进制日志,即确保log_bin和lob_bin_index设置如下:
log_bin = /var/log/mysql/mariadb-bin log_bin_index = /var/log/mysql/mariadb-bin.index
配置MariaDB服务器(在[mysqld]部分中添加)以使用SSL:
ssl ssl-ca=/etc/mysql/ssl/ca-cert.pem ssl-cert=/etc/mysql/ssl/server-cert.pem ssl-key=/etc/mysql/ssl/server-key.pem
保存并关闭文件。
重新启动MariaDB服务器,运行:
$ sudo systemctl restart mysql.service
配置复制
在主db1服务器上执行以下命令:
$ mysql
或者
$ mysql -u root -p
您必须创建一个MySQL用户主服务器(db1)。
语法为:
grant replication slave on *.* TO {username}@'{ip_of_db2_server}' identified by '{password}' REQUIRE SSL;
例如:
mysql> GRANT REPLICATION SLAVE ON *.* TO 'db_slave_usr'@'192.168.1.6' IDENTIFIED BY 'secretePassword' REQUIRE SSL; mysql> FLUSH PRIVILEGES; mysql> quit
找出Master
在shell上执行以下命令:
$ mysql -u root -p
打开MySQL Shell后,执行:
mysql> SHOW MASTER STATUS;
找出master状态并记下位置,
记录名为db2的从属服务器的文件和位置详细信息。
步骤5配置从属MariaDB服务器
在" db2服务器"上执行以下命令。
首先,将所有证书从/tmp/ssl /移至/etc/mysql /目录:
$ sudo mv /tmp/ssl/ /etc/mysql/
您需要编辑/etc/mysql/my.cnf文件,运行:
$ sudo vi /etc/mysql/my.cnf
配置MariaDB客户端(在[client]部分中添加)以使用SSL:
ssl-ca=/etc/mysql/ssl/ca-cert.pem ssl-cert=/etc/mysql/ssl/client-cert.pem ssl-key=/etc/mysql/ssl/client-key.pem
设置绑定地址,即仅侦听db2s专用IP地址192.168.1.6(确保将IP 192.168.1.6替换为实际IP地址)
bind-address = 192.168.1.6
将此服务器标记为从服务器。
此数字必须是唯一的:
server-id = 2
配置MariaDB服务器(在[mysqld]部分中添加)以使用SSL:
ssl ssl-ca=/etc/mysql/ssl/ca-cert.pem ssl-cert=/etc/mysql/ssl/server-cert.pem ssl-key=/etc/mysql/ssl/server-key.pem
保存并关闭文件。
重新启动MariaDB服务器,运行:
$ sudo systemctl restart mysql.service
在从属db2服务器上执行以下命令:
$ mysql -u root -p
执行以下sql命令:
mysql> CHANGE MASTER TO MASTER_HOST='192.168.1.5', MASTER_USER='db_slave_usr', MASTER_PASSWORD='secretePassword', MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=661, MASTER_SSL=1; mysql> SLAVE START; mysql> SHOW SLAVE STATUS\G
现在,在名为db1的主服务器上添加或删除数据,并将其复制到db2从服务器上。
有关故障转移的说明
您需要修改用PHP/Perl/Python编写的Web应用程序,以仅将数据写入主db1服务器。
如果主db1服务器关闭,则从从db2服务器读取数据。