ToB企服应用市场:ToB评测及商务社交产业平台

标题: MySQL--主从复制 [打印本页]

作者: 莫张周刘王    时间: 2024-9-3 10:08
标题: MySQL--主从复制
前言:本博客仅作记录学习利用,部分图片出自网络,如有侵犯您的权益,请接洽删除
  


一、什么是主从复制

1、界说

主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库;主数据库一般是准实时的业务数据库。
2、作用


二、主从复制原理

实现整个主从复制,需要由slave服务器上的IO历程和Sql历程共同完成
要实现主从复制,起首必须打开Master端的binary log(bin-log)功能,由于MySQL主从复制过程现实上就是Slave从Master端获取相应的二进制日记,然后再在自己slave端完全按照顺序执行日记中所记录的各种操作
  1.  master 负责写 -----A
  2.  slave relay-log -----B
  3.  I/O 负责通信读取binlog日志
  4.  SQL 负责写数据
复制代码
其主从复制流程图与步骤如下:


面试题:1、主从复制耽误大比力慢缘故原由:
  1.  主服务器配置高,从服务器的配置低
  2.  并发量大导致主服务器读的慢。从服务器写的慢
  3.  网络延迟比较高
  4.  从服务器的读写速度慢
  5.  从节点过多
复制代码
面试题:2、从数据库的读的耽误问题了解吗?怎样解决?
  1.  解决方法:
  2.  半同步复制—解决数据丢失的问题
  3.  并行复制—-解决从库复制延迟的问题
复制代码
一、主-从-从架构

10.0.0.2主库---10.0.0.3从库--10.0.0.4从库
1、关闭防火墙

  1.  systemctl stop firewalld
  2.  systemctl disable firewalld
复制代码
2、设置serve_id (主从库)

  1.  # 主库2
  2.  [root@localhost ~]# vim /etc/my.cnf
  3.  serve_id=2
  4.  log_bin=2
  5.  ​
  6.  # 从库3
  7.  [root@localhost ~]# vim /etc/my.cnf
  8.  serve_id=3
  9.  ​
  10.  # 从库4
  11.  [root@localhost ~]# vim /etc/my.cnf
  12.  serve_id=4
  13.  ​
  14.  [root@localhost ~]# systemctl restart mysqld
复制代码
3、开启binlog日记,检察binlog日记信息-(主库)

  1.  [root@localhost ~]# mysql -u root -p
  2.  mysql> show master status;   # 查看binlog日志
  3.  +----------+----------+--------------+------------------+-------------------+
  4.  | File     | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
  5.  +----------+----------+--------------+------------------+-------------------+
  6.  | 2.000001 |      154 |              |                  |                   |
  7.  +----------+----------+--------------+------------------+-------------------+
  8.  1 row in set (0.00 sec)
复制代码
4、授权 (主库)

  1.  # 允许用户名为"user1",来自10.0.0.*网段的用户使用密码"123"登录到MySQL服务器,并拥有读取二进制日志的权限
  2.  mysql> grant replication slave on *.* to "user1"@"10.0.0.%" identified by "123";
  3.  mysql> flush privileges;        # 刷新权限
复制代码
5、指定主库信息 (从库)

  1.  mysql> change master to master_host="10.0.0.2",master_user="user1",master_password="123",master_log_file="2.000001" ,master_log_pos=154;
复制代码
6、启动slave

  1.  mysql> start slave;
复制代码
7、检察从库状态

  1.  mysql> show slave status\G   查看从库状态
  2.  ...
  3.     Slave_IO_Running: Yes    io线程
  4.     Slave_SQL_Running: Yes   sql 线程
复制代码
二、主-主从-从架构

10.0.0.2主库---10.0.0.3主从库--10.0.0.4从库
初始化数据库

  1.  cd /data/mysql/data
  2.  rm -rf *
  3.  /data/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/data/mysql --datadir=/data/mysql/data
  4.  systemctl restart mysqld   
复制代码
1、设置serve_id

  1.  # 主库10.0.0.2
  2.  [root@localhost ~]# vim /etc/my/cnf
  3.  ...
  4.  serve_id=2
  5.  log_bin=2
  6.  ​
  7.  # 主从库10.0.0.3
  8.  [root@localhost ~]# vim /etc/my/cnf
  9.  ...
  10.  serve_id=3
  11.  log_bin=3
  12.  log_slave_updates
  13.  ​
  14.  # 从库10.0.0.4
  15.  [root@localhost ~]# vim /etc/my/cnf
  16.  serve_id=4
  17.  ​
  18.  # 都需要重启mysql服务
  19.  [root@localhost ~]# systemctl restart mysqld
复制代码
2、授权与指定主库信息

主库10.0.0.2中操作:
  1.  # 检察主库10.0.0.2的binlog日记 [root@localhost ~]# mysql -u root -p
  2.  mysql> show master status;   # 查看binlog日志
  3.  +----------+----------+--------------+------------------+-------------------+
  4.  | File     | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
  5.  +----------+----------+--------------+------------------+-------------------+
  6.  | 2.000001 |      154 |              |                  |                   |
  7.  +----------+----------+--------------+------------------+-------------------+
  8.  1 row in set (0.00 sec) # 主库10.0.0.2举行授权 mysql> grant replication slave  on *.* to "user1"@"10.0.0.%" identified by "123"; mysql> flush privileges;
复制代码
主从库10.0.0.3中操作:
  1.  # 检察主库10.0.0.3的binlog日记 [root@localhost ~]# mysql -u root -p mysql> show master status;   # 检察binlog日记 +----------+----------+--------------+------------------+-------------------+ | File     | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +----------+----------+--------------+------------------+-------------------+ | 3.000001 |      300 |              |                  |                   | +----------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec) # 主库10.0.0.3举行授权 mysql> grant replication slave  on *.* to "user1"@"10.0.0.%" identified by "123"; mysql> flush privileges; mysql> change master to master_host="10.0.0.2",master_user="user1",master_password="123",master_log_file="2.000001" ,master_log_pos=154; mysql> start slave; mysql> show slave status\G
复制代码
从库10.0.0.4中操作:
  1.  mysql> change master to master_host="10.0.0.2",master_user="user1",master_password="123",master_log_file="3.000001" ,master_log_pos=300; mysql> start slave; mysql> show slave status\G
复制代码
三、互为主从架构

主库10.0.0.2和10.0.0.3互为主从架构
1、设置serve_id

  1.  # 主从库10.0.0.2
  2.  [root@localhost ~]# vim /etc/my/cnf
  3.  ...
  4.  serve_id=2
  5.  log_bin=2
  6.  log_slave_updates
  7.  ​
  8.  # 主从库10.0.0.3
  9.  [root@localhost ~]# vim /etc/my/cnf
  10.  ...
  11.  serve_id=3
  12.  log_bin=3
  13.  log_slave_updates
  14.  ​
  15.  [root@localhost ~]# systemctl restart mysqld
复制代码
2、授权与指定主库信息

主从库10.0.0.2:
  1.  # 检察主库10.0.0.2的binlog日记 [root@localhost ~]# mysql -u root -p
  2.  mysql> show master status;   # 查看binlog日志
  3.  +----------+----------+--------------+------------------+-------------------+
  4.  | File     | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
  5.  +----------+----------+--------------+------------------+-------------------+
  6.  | 2.000001 |      154 |              |                  |                   |
  7.  +----------+----------+--------------+------------------+-------------------+
  8.  1 row in set (0.00 sec) # 主库10.0.0.2举行授权 mysql> grant replication slave  on *.* to "user1"@"10.0.0.%" identified by "123"; mysql> flush privileges; mysql> change master to master_host="10.0.0.3",master_user="user1",master_password="123",master_log_file="3.000001" ,master_log_pos=300; mysql> start slave; mysql> show slave status\G
复制代码
主从库10.0.0.3:
  1.  # 检察主库10.0.0.3的binlog日记 [root@localhost ~]# mysql -u root -p mysql> show master status;   # 检察binlog日记 +----------+----------+--------------+------------------+-------------------+ | File     | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +----------+----------+--------------+------------------+-------------------+ | 3.000001 |      300 |              |                  |                   | +----------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec) # 主库10.0.0.3举行授权 mysql> grant replication slave  on *.* to "user1"@"10.0.0.%" identified by "123"; mysql> flush privileges; mysql> change master to master_host="10.0.0.2",master_user="user1",master_password="123",master_log_file="3.000001" ,master_log_pos=154; mysql> start slave; mysql> show slave status\G
复制代码
四、问题解决

检察uuid,uuid号需要唯一:
  1.  cat /data/mysql/data/auto.cnf
复制代码
致谢

在此,我要对全部为知识共享做出贡献的个人和机构表现最深切的感谢。同时也感谢每一位花时间阅读这篇文章的读者,假如文章中有任何错误,接待留言指正。 
   学习永无止境,让我们共同进步!!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4