linux mysql 主从复制

准备环境  两台rpm安装好的数据库

密码提前设置好   

防火墙关掉

两台主机可以ping通

mysql主从复制

主从复制的作用:

  1. 做备份   保证数据的安全箱
  2. 提高读写效率    写入数据主   读取数据从

 原理

 

 

工作原理:

  1. mysql主从架构部署完成之后,主节点会生成二进制日志,派生dump线程,从节点会生成中继日志  派生 i/o线程和sql线程
  2. 从节点的i/o会监控主节点的二进制日志,如果主节点二进制日志更新,则从节点i/o会发送数据同步的请求请求,该请求会被主节点的dump线程接收
  3. 主的dump线程接收到从节点的同步请求,会找到对应的二进制日志及对应的偏移量并将更新的日志信息响应给从的I/O线程
  4. 从的i/o线程线程获取到响应数据后将日志信息记录到中继日志中农
  5. 当中继日志更新后,从节点的sql线程会将中继日志的sql语句进行提取并执行,执行完后,实现主从节点数据同步

主   192.168.2.10

从   192.168.2.60

 

主:

[root@localhost ~]# vim /etc/my.cnf

server-id = 1

log-bin=mysql-bin  #开启二进制日志

[root@localhost ~]# systemctl restart mysqld

[root@localhost ~]# mysql -uroot -p'1234.Com'

mysql> grant replication slave on *.* to "slave"@"192.168.2.%" identified by '1234.Com';

mysql> flush privileges;

mysql> show master status;

+------------------+----------+--------------+------------------+-------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+------------------+-------------------+

| mysql-bin.000004 |      600 |              |                  |                   |

+------------------+----------+--------------+------------------+-------------------+

1 row in set (0.00 sec)

从:

[root@localhost ~]# vim /etc/my.cnf

server-id=2

relay-log=relay-bin  #开启中继日志

[root@localhost ~]# systemctl restart mysqld

[root@localhost ~]# mysql -uroot -p'1234.Com'

mysql> change master to master_host='192.168.2.10',master_user='slave',master_password='1234.Com',master_log_file='mysql-bin.000004',master_log_pos=600;

Query OK, 0 rows affected, 2 warnings (0.11 sec)

mysql> start slave;

mysql> show slave status\G

       Slave_IO_Running: Yes

       Slave_SQL_Running: Yes

报错解决

主:

mysql>  grant replication slave on *.* to "slave"@"192.168.2.%" identified by '1234.Com';

Query OK, 0 rows affected, 1 warning (0.08 sec)

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

如果主重新授权  偏移量和二进制文件名会改变

从:

如果想重新接收授权  需要停止从服务   重新建立从服务

mysql> stop slave;

mysql> reset slave;

mysql> change master to master_host='192.168.2.10',master_user='slave',master_password='1234.Com',master_log_file='mysql-bin.000004',master_log_pos=1217;

mysql> start slave;

mysql> show slave status\G

主主    互为主从

主1  192.168.2.10

主2  192.168.2.60

主1做为主   主2 为从   

主2为主     主1为从

主1

[root@localhost ~]# vim /etc/my.cnf

server-id = 1

log-bin=mysql-bin

log-slave-updates=1   #开启中继日志

auto_increment_offset=1   #从1开始自增

auto_increment_increment=2   #每次自增两个

[root@localhost ~]# systemctl restart mysqld

[root@localhost ~]# mysql -uroot -p'1234.Com'

mysql> grant replication slave on *.* to "slave"@"192.168.2.%" identified by "1234.Com";

mysql> flush privileges;

mysql> show master status\G

*************************** 1. row ***************************

             File: mysql-bin.000005

         Position: 610

主2:

[root@localhost ~]# vim /etc/my.cnf

server-id=2

log-bin=mysql-bin

log-slave-updates=1

auto_increment_offset=2

auto_increment_increment=2

[root@localhost ~]# systemctl restart mysqld

[root@localhost ~]# mysql -uroot -p'1234.Com'

mysql> stop slave;

mysql> reset slave;

mysql> change master to master_host='192.168.2.10',master_user='slave',master_password='1234.Com',master_log_file='mysql-bin.000005',master_log_pos=610;

mysql> start slave;

mysql> show slave status\G

mysql> grant replication slave on *.* to "slave"@"192.168.2.%" identified by "1234.Com";

mysql> flush privileges;

mysql> show master status\G

*************************** 1. row ***************************

             File: mysql-bin.000004

         Position: 610

主1:

mysql> change master to master_host='192.168.2.60',master_user='slave',master_password='1234.Com',master_log_file='mysql-bin.000004',master_log_pos=610;

mysql> start slave;

mysql> show slave status\G

基于ssl主从

https  http+ssl

由于在主从复制当中  数据传输是明文的  所以安全性就大大降低  因此需要借助ssl加密传输数据  可以增加其安全性

https  证书

数据的证书是自带的  主从  (apache+https)

mysql5.6版本之上的  

主  192.168.2.10

从  192.168.2.60

主:

[root@localhost ~]# cd /var/lib/mysql

[root@localhost mysql]# ls

需要把主的证书拷贝到从上   这样才能做主从

远程拷贝

主:

[root@localhost mysql]# scp /var/lib/mysql/ca.pem root@192.168.2.60:/var/lib/mysql  #证书

#申请文件

[root@localhost mysql]# scp /var/lib/mysql/client-cert.pem root@192.168.2.60:/var/lib/mysql

#秘钥文件  

[root@localhost mysql]# scp /var/lib/mysql/client-key.pem root@192.168.2.60:/var/lib/mysql

[root@localhost mysql]# vim /etc/my.cnf

server-id = 1

log-bin=mysql-bin

ssl-ca=/var/lib/mysql/ca.pem

ssl-cert=/var/lib/mysql/client-cert.pem

ssl-key=/var/lib/mysql/client-key.pem

[root@localhost mysql]# systemctl restart mysqld

[root@localhost mysql]# mysql -uroot -p'1234.Com'

mysql> grant replication slave on *.* to "slave"@"192.168.2.%" identified by "1234.Com";

mysql> flush privileges;

mysql> show master status\G

*************************** 1. row ***************************

             File: mysql-bin.000006

         Position: 600

从:

[root@localhost ~]# vim /etc/my.cnf

server-id=2

relay-log=relay-bin

[root@localhost ~]# systemctl restart mysqld

[root@localhost ~]# mysql -uroot -p'1234.Com'

mysql> stop slave;

mysql> reset slave;

mysql> change master to master_host='192.168.2.10',master_user='slave',master_password='1234.Com',master_log_file='mysql-bin.000006',master_log_pos=600,master_ssl=1,master_ssl_ca='/var/lib/mysql/ca.pem',master_ssl_cert='/var/lib/mysql/client-cert.pem',master_ssl_key='/var/lib/mysql/client-key.pem';

Query OK, 0 rows affected, 2 warnings (0.10 sec)

mysql> start slave;

mysql> show slave status\G

基于GTID的主从复制

GTID:global  transaction  identity,全局事务标识符,由mysql服务器的UUID和事务的ID号两部分组成,通过GTID可以表示一个全球唯一的事务

从MySQL 5.6.5 开始新增了一种基于 GTID 的复制方式。通过 GTID 保证了每个在主库上提交的事务在集群中有一个唯一的ID。这种方式强化了数据库的主备一致性,故障恢复以及容错能力。

GTID工作原理简单介绍

1.master更新数据的时候,会在事务前产生GTID,一同记录到binlog日志中。

2.slave端的io线程将binlog写入到本地relay log中。

3.然后SQL线程从relay log中读取GTID,设置gtid_next的值为该gtid,然后对比slave端的binlog是否有记录

4.如果有记录的话,说明该GTID的事务已经运行,slave会忽略

5.如果没有记录的话,slave就会执行该GTID对应的事务,并记录到binlog中

主  192.168.2.10

从   192.168.2.60

主:

[root@localhost mysql]# vim /etc/my.cnf

server-id = 1

log-bin=mysql-bin

gtid-mode=on

enforce-gtid-consistency=on  #启动gtid

[root@localhost mysql]# systemctl restart mysqld

[root@localhost mysql]# mysql -uroot -p'1234.Com'

grant replication slave on *.* to "slave"@"192.168.2.%" identified by "1234.Com";

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

从:

[root@localhost ~]# vim /etc/my.cnf

server-id=2

relay-log=relay-bin

gtid-mode=on

enforce-gtid-consistency=on

[root@localhost ~]# systemctl restart mysqld

[root@localhost ~]# mysql -uroot -p'1234.Com'

mysql> stop slave;

mysql> reset slave;

mysql> change master to master_host='192.168.2.10',master_user='slave',master_password='1234.Com',master_auto_position=1;

mysql> start slave;

mysql> show slave status\G

mysql基于gtid和ssl的主从

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据库从删库到跑路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值