基于ssl功能实现mysql主从复制


基于ssl功能实现mysql主从复制


        证书准备:
                
                CA证书:
                    第一步:创建CA私钥
                        [root@localhost CA]# (umask 066;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
                    第二步:生成自签证书
                        [root@localhost CA]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem  -days 7300 -out /etc/pki/CA/cacert.pem

                ————————————————————————————–

                mysql准备私钥及证书申请文件
                    第一步:创建mysql私钥:
                        [root@localhost ~]# (umask 066;openssl genrsa -out /var/lib/mysql/ssl/mysql.key 2048)
                    第二步:生成证书申请文件及发送给CA服务端
                        [root@localhost ~]# openssl req -new -key /var/lib/mysql/ssl/mysql.key -days 365 -out /var/lib/mysql/ssl/mysql.csr
                        注意:国家,省 ,公司名称必须和CA一致
                        将证书申请文件发送至CA服务器
                

                ————————————————————————————–

                在CA服务器端颁发证书:
                    [root@localhost CA]# openssl ca -in /tmp/mysql.csr -out /tmp/mysql.crt -days 365

                    附上查看证书中的信息命令:
                        openssl x509 -in /PATH/FROM/CERT_FILE -noout -text|subject|serial|dates
     

                ————————————————————————————–

                    将证书发送至mysql服务器

                    以及将CA的自签证书发送至从服务器

                    证书准备动作到此结束


                    基于ssl功能实现主从复制,是主从双方都需要互相验证,即从服务器也要有自己的证书。
                    所以,按照上述流程,生成slave服务器的证书


                ================================================
                ================================================

        


        配置mysql服务端:
                
                在主服务器端查看关于ssl有关的参数  及  主从复制–主服务器  的配置项:

                    MariaDB [(none)]> show variables like ‘%ssl%’;
                      基于ssl功能实现mysql主从复制
 
  
                由于ssl功能配置项为全局配置参数,所以编辑 /etc/my.cnf 文件
                        由于是客户端验证服务端,所以只需要配置  ssl_cert(mysql服务器端的证书位置)、ssl_key(mysql私钥位置)与ssl_ca(CA证书位置)即可
                    基于ssl功能实现mysql主从复制
 
 
 
                    开启服务,并检查:
                        基于ssl功能实现mysql主从复制
 
                                           

                ————————————————————————————–


                创建一个基于ssl功能,从服务器用于复制mysql主服务器数据库的最小权限账号:
                    
                    MariaDB [(none)]> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO ‘slave1’@’10.1.35.25’ IDENTIFIED BY ‘passwd’ REQUIRE ssl;    基于ssl功能实现mysql主从复制
 


                查看binlog位置,并记录,用于从服务器配置:
MariaDB [(none)]> SHOW MASTER LOGS;
基于ssl功能实现mysql主从复制

 

                ================================================
                ================================================


                    从服务器配置:

                    编辑 /etc/my.cnf ,由于是从服务器,所以需要开启中继日志(relay_log),且server_id不应与同一层面的mysql服务器相同                 

                           基于ssl功能实现mysql主从复制
 

 
                       
                ————————————————————————————–

                            配置从服务器,指向主服务器(这是是全局配置参数,但是不建议写在配置文件/etc/my.cnf 中,因为如果slave因意外宕机,在为了检查数据完整性的情况下,再启动mysql的时候,也会自动启动复制功能,不利于排查错误)
MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST=’10.1.35.1′,MASTER_USER=’slave1′,MASTER_PASSWORD=’passwd’,MASTER_LOG_FILE=’master-log.000025‘,MASTER_LOG_POS=245,MASTER_SSL=1,MASTER_SSL_CA=’/var/lib/mysql/ssl/cacert.pem’,MASTER_SSL_CERT=’/var/lib/mysql/ssl/slave.crt’,MASTER_SSL_KEY=’/var/lib/mysql/ssl/slave.key’;
基于ssl功能实现mysql主从复制
有关MASTER_SSL的配置不可以写在/etc/my.cnf 中,会报错



MariaDB [(none)]> START SLAVE;

基于ssl功能实现mysql主从复制

 
 


                ================================================
                ================================================

                验证主从效果:
            
                ————————————————————————————–

                    主服务器创建数据库 mydb

                        基于ssl功能实现mysql主从复制

    


                ————————————————————————————–

                    从服务器查看:
                     
                        基于ssl功能实现mysql主从复制

 



                ================================================
                ================================================



    总结:

复制时应该注意的问题:
1、从服务设定为“只读”;(双主模式无需设置)
在从服务器启动read_only,但仅对非SUPER权限的用户有效;
阻止所有用户:
mysql> FLUSH TABLES WITH READ LOCK;


2、尽量确保复制时的事务安全
在master节点启用参数:
sync_binlog = ON    #每次事务提交的时候,都立即将二进制日志时间都重内存同步到磁盘中,能确保从服务器能立即得到事件,而且能保护本地数据安全
如果用到的是InnoDB存储引擎:
innodb_flush_logs_at_trx_commit=ON      #在事务提交时,立即刷写事务日志从内存到磁盘上
innodb_support_xa=ON    #支持分布式事务
#这两项启动起来,能在一定程度上确保从服务器能够立即得到主服务器的最新事件


3、从服务器意外中止时尽量避免自动启动复制线程
由于数据是重要的,服务器能意外终止的时间都是奇异的,所以,终止后不要让从服务器自动启动复制线程,等人工手动排查后才从新开启复制线程;有可能复制线程复制到一半的时候出现意外,复制线程或许没有这种功能—–不知道时候需要再次复制上次中断的事件               
4、从节点:设置参数
每一个从服务器都会保存一个文件 relay-log-info,是记录在主服务器上复制二进制日志的位置,以及本地中继日志的位置,为避免产生繁忙的IO操作,这些参数都是先保存在内存上的,到一定程度才会同步到磁盘上的,所以不安全
sync_master_info=ON
sync_relay_log_info=ON
                        以上两项为立即刷写数据从内存到磁盘











原创文章,作者:hunter,如若转载,请注明出处:http://www.178linux.com/60390

(0)
hunterhunter
上一篇 2016-11-22 13:14
下一篇 2016-11-22 16:33

相关推荐

  • 马哥教育网络21期+第九周练习博客

    马哥教育网络21期+第九周练习博客 1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现; [root@localhost bin]# cat 1.sh  #!/bin/bash # while&nbsp…

    Linux干货 2016-09-05
  • Openssl——为你的信息保驾护航

    OpenSSL基础 ·传输层协议:TCP,UDP,SCTP         port:进程地址,进程向内核注册使用某端口(独占) ·同一主机上的进程间通信:IPC,message queue,shm,semerphor ·不同主机上的进程间通信:socket  &nbs…

    Linux干货 2016-09-22
  • sed,vim练习

    1 、删除/etc/grub2.cfg 文件中所有以空白开头的行行首的 空白字符 [root@localhost ~]# sed -r 's@^[[:space:]]+@@' /etc/grub2.cfg 2 、删除/etc/fstab 文件中所有以#开头,后面至少跟一个空白字符的行的行首…

    Linux干货 2016-08-10
  • linux基础练习

    马哥教育23期网络班+第6周课堂练习 Linux 基础练习 一、linux基础练习题 1、复制/etc/rc.d/rc.sysinit 文件至/tmp 目录,将/tmp/rc.sysinit 文件中的以至少一个空白字符开头的行的行首加#; 2、复制/boot/grub/grub.conf 至/tmp目录中 删除/tmp/grub.conf 文件中的行首的空白…

    Linux干货 2016-11-01
  • Linux基础命令及获取命令帮助

    何为命令?         linux命令是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置She…

    Linux干货 2016-10-25
  • 使用mysql-mmm实现高可用mysql读写分离

    MMM介绍:  MMM全称为Multi-Master Replication Manager for MySQL,即为主主复制管理器;根据MMM官网介绍,其工作原理类似于lvs,都是利用vip地址;但lvs只有一个组件便可以正常工作,而MMM则使用三个组件,分别是mysql-mmm、mysql-mmm-agent、mysql-mmm-monitor…

    Linux干货 2015-08-04