Linux:MYSQL(十四)MYSQL异步复制,复制指定库,加密登录

半同步复制

默认情况下,MySQL的复制功能是异步的,异步复制可以提供最佳的性能,主库把binlog日志发送给从库即结束,并不验证从库是否接收完毕。这意味着当主服务器或从服务器端发生故障时,有可能从服务器没有接收到主服务器发送过来的binlog日志,这就会造成主服务器和从服务器的数据不一致,甚至在恢复时造成数据的丢失

半同步复制实现:

实验准备准备环境

  • 主服务器:192.168.32.7
vim /etc/my.cnf
	[mysqld]
	server=1
	log_bin
	skip_name_reslove
	innodb_file_per_table
vim master.sql
	grant replication slave on *.* to repluser@'192.168.32.%' identified by 'centos';
mysql < master.sql
mysql -e 'show master logs'  查看日志位置
  • 从服务器1:192.168.32.17 从服务器2:192.168.32.27
vim salve.sql
	CHANGE MASTER TO
  	MASTER_HOST='192.168.32.7',
  	MASTER_USER='repluser',
  	MASTER_PASSWORD='centos',
  	MASTER_PORT=3306,
  	MASTER_LOG_FILE='mariadb-bin.000001',
  	MASTER_LOG_POS=400;
	start slave;
	show slave status\G
mysql < salve.sql
mysql -e 'show slave status\G'
scp slave.sql 192.168.32.27:

开启半同步配置

  • 主服务器配置:
mysql>INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'; 安装插件
mysql>SET GLOBAL rpl_semi_sync_master_enabled=1; 开启半同步
mysql>SET GLOBAL rpl_semi_sync_master_timeout = 1000; 超时长为1s
mysql>SHOW GLOBAL VARIABLES LIKE '%semi%';
mysql>SHOW GLOBAL STATUS LIKE '%semi%‘;
  • 从服务器配置:
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so'; 安装插件
mysql> SET GLOBAL rpl_semi_sync_slave_enabled=1; 开启半同步
注意:若需长期有效需写入配置文件,
查看是否开启,如未生效可stop slave后start slave重新开启进程
## 关闭进程后 测试:
insert teachers values(6,'d',30,'F'); 

真实环境:
master—slave(半同步)—slave1,2,3

MySQL复制 复制指定库和表

让从节点仅复制指定的数据库,或指定数据库的指定表

###两种实现方式:
(1) 基于服务器选项

binlog_do_db = 数据库白名单列表,多个数据库需多行实现
binlog_ignore_db = 数据库黑名单列表

- 用法:写入配置文件 binlog_do_db=hellodb
- 原理:主服务器仅向二进制日志中记录与特定数据库相关的事件
- 问题:基于二进制还原将无法实现;不建议使用
- 注意:此项和binlog_format相关
- 参看:https://mariadb.com/kb/en/library/mysqld-options/#-binlog-ignore-db

(2)基于变量复制

- 从服务器上的复制过滤器相关变量:
replicate_do_db= 指定复制库的白名单
replicate_ignore_db= 指定复制库黑名单
replicate_do_table= 指定复制表的白名单
replicate_ignore_table= 指定复制表的黑名单
replicate_wild_do_table= foo%.bar% 支持通配符
replicate_wild_ignore_table=

- 用法:set global replicate_do_db='hellodb'
- 注意:需要切库后插入测试
- 原理:从服务器SQL_THREAD在replay中继日志中的事件时,仅读取与特定数据库(特定表)相关的事件并应用于本地
- 问题:会造成网络及磁盘IO浪费

MySQL复制加密

  • 基于SSL复制:
    在默认的主从复制过程或远程连接到MySQL/MariaDB所有的链接通信中的数据都是明文的,外网里访问数据或则复制,存在安全隐患。通过SSL/TLS加密的方式进行复制的方法,来进一步提高数据的安全性

  • 配置实现:
    参看:https://mariadb.com/kb/en/library/replication-with-secure-connections/

  • 流程步骤:

1.主服务器开启SSL:[mysqld] 加一行ssl
2.主服务器配置证书和私钥;并且创建一个要求必须使用SSL连接的复制账号
3.从服务器使用CHANGER MASTER TO 命令时指明ssl相关选项
  • Master服务器配置
[mysqld]
log-bin
server_id=1
ssl
ssl-ca=/etc/my.cnf.d/ssl/cacert.pem
ssl-cert=/etc/my.cnf.d/ssl/master.crt
ssl-key=/etc/my.cnf.d/ssl/master.key
  • Slave服务器配置
mysql>
CHANGE MASTER TO
MASTER_HOST='MASTERIP',
MASTER_USER='rep',
MASTER_PASSWORD='centos',
MASTER_LOG_FILE='mariadb-bin.000001',
MASTER_LOG_POS=245,
MASTER_SSL=1,
MASTER_SSL_CA = '/etc/my.cnf.d/ssl/cacert.pem',
MASTER_SSL_CERT = '/etc/my.cnf.d/ssl/slave.crt',
MASTER_SSL_KEY = '/etc/my.cnf.d/ssl/slave.key';

完整实验:

生成证书准备流程:

192.168.32.7为主服务器
192.168.32.17为从服务器
192.168.32.27做CA并申请证书,之后scp给主从服务器

cd /etc/my.cnf.d/
mkdir ssl
cd ssl
openssl genrsa 2048 >cakey.pem  生成2048位ca私钥文件
openssl rep -new -x509 -key cakey.epm -out cacert.pem -days 3650 给自己生成一个证书
	CN
	beijing
	beijing
	dushan
	opt
	ca.dushan.com
ll
openssl req -newkey rsa:1024 -days 100 -nodes -keyout master.key > master.csr 生成证书并签名
	CN
	beijing
	beijing
	dushan
	opt
	master.dushan.com
ll
openssl x509 -req -in master.csr -days 100 -CA cacert.pem -CAkey cakey.pem -set_serial 01 > master.crt 颁发主服务器证书
ll
openssl req -newkey rsa:1024 -days 100 -nodes -keyout slave.key > slave.csr 生成证书并签名
	CN
	beijing
	beijing
	dushan
	opt
	slave.dushan.com
ll
openssl x509 -req -in slave.csr -days 100 -CA cacert.pem -CAkey cakey.pem -set_serial 02 > slave.crt 颁发从服务器证书
ll
scp cacert.pem master.crt master.key 192.168.32.7:/etc/my.cnf.d/ssl/
scp cacert.pem slave.crt slave.key 192.168.32.17:/etc/my.cnf.d/ssl/

查看ssl是否开启

show variables like '%ssl%';

建立强制加密账号

grant replication slave on *.* to ssluser@'192.168.32.%' identified by 'centos' require ssl;

Master服务器配置

[mysqld]
log-bin
server_id=1
ssl
ssl-ca=/etc/my.cnf.d/ssl/cacert.pem
ssl-cert=/etc/my.cnf.d/ssl/master.crt
ssl-key=/etc/my.cnf.d/ssl/master.key

在从服务器登录测试

mysql --ssl-ca=cacert.pem --ssl-cert=slave.crt --ssl-key=slave.key -ussluser -pcentos -h192.168.32.7

在主服务器上查看位置信息

show master logs;
	mariadb-bin.00005 412

清空从服务器之前同步信息

mysql>stop slave;
		reset slave all;
cd /var/lib/mysql 
ll  进入数据库文件夹查看master.info信息是否被清空

在从服务器重新配置同步配置

mysql>
CHANGE MASTER TO
MASTER_HOST='192.168.32.7',
MASTER_USER='ssluser',
MASTER_PASSWORD='centos',
MASTER_LOG_FILE='mariadb-bin.00005', 
MASTER_LOG_POS=412,
MASTER_SSL=1,
MASTER_SSL_CA = '/etc/my.cnf.d/ssl/cacert.pem',
MASTER_SSL_CERT = '/etc/my.cnf.d/ssl/slave.crt',
	MASTER_SSL_KEY = '/etc/my.cnf.d/ssl/slave.key';
start slave;
show slave status\G

复制的监控和维护

(1) 清理日志
PURGE { BINARY | MASTER } LOGS { TO ‘log_name’ | BEFORE datetime_expr }
RESET MASTER
RESET SLAVE

(2) 复制监控
SHOW MASTER STATUS
SHOW BINLOG EVENTS
SHOW BINARY LOGS
SHOW SLAVE STATUS
SHOW PROCESSLIST

(3) 从服务器是否落后于主服务
Seconds_Behind_Master: 0

(4) 如何确定主从节点数据是否一致
percona-tools

(5) 数据不一致如何修复
删除从数据库,重新复制

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值