基于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
下一篇 2016-11-22

相关推荐

  • 常用文本处理工具及grep和正则表达式

    一、文件查看命令 (1)普通查看工具:cat,tac,rev  1、cat命令常用选项    -n:显示行号    -E:显示行结束符$    -A:显示所有控制符  2、tac:从最后一行开始倒序显示  3、rev:将每一行的内容反转显示   (2)分页查看…

    Linux干货 2016-08-11
  • 浅谈群红包的实现

    前言:红包是支付的方式, 也是社交的延伸。群红包在这两块领域串联得很好, 表现尤为的浓墨重彩. 承接上两篇技术浅谈:1). 浅谈接龙红包的技术实现.2). 浅谈微信红包摇一摇的技术实现.这一次, 让我们谈谈群红包的技术实现. 一为是红包的分配算法, 二为竞抢的技术实现. 分配算法:最初玩群红包的时候, 并没有意识到分配算法的难度…

    Linux干货 2015-03-10
  • 马哥网络教育班第21期+第七周课程练习

    1、创建一个10G分区,并格式为ext4文件系统; (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl; (2) 挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳; [root@localhost ~]# fdisk /dev/sd…

    Linux干货 2016-08-12
  • HA cluster原理

    HA cluster 一、什么是高可用集群   高可用集群就是当某一个节点或服务器发生故障时,另一个节点能够自动且立即向外提供服务,即将有故障节点上的资源转移到另一个节点上去,这样另一个节点有了资源既可以向外提供服务。高可用集群是用于单个节点发生故障时,能够自动将资源、服务进行切换,这样可以保证服务一直在线。在这个过程中,对于客户端来说是透明的。 …

    2016-11-27
  • 建立dns服务

    一 、环境 两台机器,一台LINUX,机器名为LINUX,域名为tongqiang.cnIP地址为192.168.0.5,另一台机器为WIN98,机器名为tongqiang,IP地址从LINUX上DHCP服务器上获得。 二 、建立DNS服务器(假设你的DNS软件包已经安装好了,而且是在安装LINUX是选择安装DNS服务器的) 建立DNS服务器只需要修改以下几…

    2017-10-09
  • N25_第十二周作业

    1、请描述一次完整的http请求处理过程;     1)建立或者处理连接:建立请求或拒绝请求     2)接收请求:接收来自于网络上的主机请求报文中对特定资源的一次请求的过程;     3)处理请求:对请求报文进行解析,主要获取客户端请求的…

    Linux干货 2017-03-06