基于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

相关推荐

  • 硬盘基础知识及 MBR、GPT分区格式

    一,硬盘知识     硬盘接口类型:          并行:             IDE: 133MB/s &n…

    Linux干货 2016-09-19
  • N22-网络班 第四周作业

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 cp -r /etc/skel /home/tuser1 chmod -R go= /home/tuser1 2、编辑/etc/group文件,添加组hadoop。…

    Linux干货 2016-09-19
  • 马哥教育网络班21期+第8周课程练习

    1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。 集线器的主要功能是对接收到的信号进行再生整形放大,以扩大网络的传输距离,同时把所有节点集中在以它为中心的节点上。它工作于OSI(开放系统互联参考模型)参考模型第一层,即“物理层”。 网桥将两个相似的网络连接起来,并对网络数据的流通进行管理。它工作于数据链路层,不但能扩展网络的距离…

    Linux干货 2016-09-19
  • linux文件系统分类

    1、linux文件系统分配策略: 块分配(blockallocation)和扩展分配(extentallocation): 块分配:磁盘上的文件块根据需要分配给文件,避免了存储空间的浪费。但当文件扩充时,会造成文件中文件块的不连续,从而导致过多的磁盘寻道时间。 每一次文件扩展时,块分配算法就需要写入文件块的结构信息,也就是meta-dada。meta-dat…

    Linux干货 2017-05-02
  • 任务计划2

    [root@localhost app]# cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin:/root/bin MAILTO=root   # For details see man 4 crontabs   # Example of job defi…

    Linux干货 2017-05-15
  • 集中练习6-bash脚本

    集中练习6-bash脚本

    Linux干货 2017-12-05