请选择 进入手机版 | 继续访问电脑版

[MySql] MySQL数据库主从复制原理及作用分析

[复制链接]
查看186 | 回复32 | 2021-9-12 23:10:19 | 显示全部楼层 |阅读模式
目次

1.数据库主从分类:

主从分为俩种:传统主从/GTID主从

2.mysql主从先容 由来

实际 生存 中,数据极其紧张 ,存储数据库的方式很多,但是数据库存在着一种隐患。
隐患:

用一台数据库存放数据,若数据库服务器宕机了导致数据丢失数据多了,访问量大了,一台服务器无法保证服务质量

因此数据库主从诞生

3.主从作用

故障切换,实现准备 读写分离,提供查询服务数据库管理体系 备份(DBSM),避免影响业务

4.主从复制原理

  1. bin log:二进制日志,记录写操作(增删改查)
  2. Relay log:中继日志
复制代码
  1. 主库会将全部 的写操作记录到binlog日记 下天生 一个log dump线程,将binlog日记 传给从库的I/O线程。
  2. 从库有俩个线程:
    I/O线程
    sql线程
  3. 从库的I/O线程会哀求 主库得到binlog日记 写到relay log(中继日记 )中
  4. sql线程,会读取relay log日记 文件中的日记 ,并分析 具体 操作,来实现主从的操作一样,达到数据同等

5.主从复制设置 (数据同等 时)

步骤:

  • 确保主数据库与从数据的数据一样
  • 主数据库里创建一个同步账号授权给从数据库利用
  • 设置 主数据库(修改设置 文件)
  • 设置 从数据库(修改设置 文件)

环境需求:

俩台mysql服务器,一台主服务器(写功能),一台从服务器(读功能)

主数据库(centos8)  ip地址:192.168.136.145  centos8.0/mysql5.7  雷同 数据
                   第六节:数据不雷同 (大概 在公司之前有数据的环境 )
从数据库(centos8)  ip地址:192.168.136.191  centos7.0/mysql5.7  雷同 数据

5.1主从服务器分别安装mysql5.7

可看干系 教程教程(超具体 ):https://www.jb51.net/article/221946.htm

  1. #二进制安装:https://blog.csdn.net/qq_47945825/article/details/116848970?spm=1001.2014.3001.5501
  2. #或者网络仓库安装:(一般二进制安装)
  3. https://blog.csdn.net/qq_47945825/article/details/116245442?spm=1001.2014.3001.5501
复制代码

5.2主数据库与从数据库数据同等

  1. [root@mysql01 ~]# mysql -uroot -e 'show databases;'
  2. +--------------------+
  3. | Database |
  4. +--------------------+
  5. | information_schema |
  6. | mysql |
  7. | performance_schema |
  8. | sys |
  9. +--------------------+
  10. [root@mysql02 ~]# mysql -uroot -e 'show databases;'
  11. +--------------------+
  12. | Database |
  13. +--------------------+
  14. | information_schema |
  15. | mysql |
  16. | performance_schema |
  17. | sys |
  18. +--------------------+
复制代码

5.3在主数据库里创建一个同步账号授权给从数据库利用

  1. replication:复制 slave:从 192.168.136.191:从数据库ip地址
复制代码
  1. mysql> create user 'vvv'@'192.168.136.191' identified by 'vvv0917';
  2. Query OK, 0 rows affected (0.00 sec)
  3. mysql> grant replication slave on *.*to 'vvv'@'192.168.136.191';
  4. Query OK, 0 rows affected (0.00 sec)
  5. mysql> flush privileges;
  6. Query OK, 0 rows affected (0.00 sec)
复制代码

5.4在从库上测试毗连

  1. [root@mysql02 ~]# mysql -uvvv -vvv0917 -h192.168.136.145
  2. mysql> show databases;
  3. +--------------------+
  4. | Database |
  5. +--------------------+
  6. | information_schema |
  7. +--------------------+
  8. 1 row in set (0.00 sec)
复制代码

5.5设置 主数据库

  1. [root@mysql01 ~]# cat /etc/my.cnf
  2. [mysqld]
  3. basedir = /usr/local/mysql
  4. datadir = /opt/data
  5. socket = /tmp/mysql.sock
  6. port = 3306
  7. pid-file = /opt/data/mysql.pid
  8. user = mysql
  9. skip-name-resolve
  10. log-bin=mysql_bin #启动binlog日志
  11. server-id=10 #数据库服务器唯一标识,id必须比从数据库小
  12. #重启服务 (此重启方式,前提已配置mysqld.service文件)
  13. [root@mysql01 ~]# systemctl restart mysqld
  14. 观察主数据库状态:
  15. mysql> show master status;
  16. +------------------+----------+--------------+------------------+-------------------+
  17. | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
  18. +------------------+----------+--------------+------------------+-------------------+
  19. | mysql_bin.000004 | 962 | | | |
  20. +------------------+----------+--------------+------------------+---
复制代码

5.6设置 从数据库

  1. [root@mysql02 ~]# cat /etc/my.cnf
  2. [mysqld]
  3. basedir = /usr/local/mysql
  4. datadir = /opt/data
  5. socket = /tmp/mysql.sock
  6. port = 3307
  7. user = mysql
  8. pid-file = /opt/data/mysql.pid
  9. skip-name-resolve
  10. #skip-grant-tables
  11. server-id=20 #服务器id,大于主数据库id
  12. relay-log=mysql_relay_log #启动中继日志
  13. #log-bin=mysql-bin
  14. #重启服务:
  15. [root@mysql02 ~]# systemctl restart mysqld
复制代码

5.7设置 并启动主从复制的功能(mysql02从数据库上)

  1. [root@slave02 ~]# mysql -uroot -p
  2. mysql> change master to
  3. -> master_host='192.168.136.145',
  4. -> master_user='vvv',
  5. -> master_password='vvv0917',
  6. -> master_log_file='mysql_bin.000004',
  7. -> master_log_pos=962;
  8. Query OK, 0 rows affected, 2 warnings (0.01 sec)
  9. mysql> start slave; #stop slave为关闭
  10. Query OK, 0 rows affected (0.01 sec)
  11. #查看配置状态:
  12. mysql> show slave status\G;
  13. Slave_IO_State: Waiting for master to send event
  14. Master_Host: 192.168.136.145
  15. Master_User: vvv
  16. Master_Port: 3306
  17. Connect_Retry: 60
  18. Master_Log_File: mysql_bin.000004
  19. Read_Master_Log_Pos: 962
  20. Relay_Log_File: mysql_relay_log.000002
  21. Relay_Log_Pos: 320
  22. Relay_Master_Log_File: mysql_bin.000004
  23. Slave_IO_Running: Yes
  24. Slave_SQL_Running: Yes
  25. #此处必须俩个都是yes,就是配置成功,否则失败
复制代码

5.8测试:

主库:

  1. mysql> show databases;
  2. +--------------------+
  3. | Database |
  4. +--------------------+
  5. | information_schema |
  6. | mysql |
  7. | performance_schema |
  8. | sys |
  9. +--------------------+
复制代码

从库:

  1. mysql> show databases;
  2. +--------------------+
  3. | Database |
  4. +--------------------+
  5. | information_schema |
  6. | mysql |
  7. | performance_schema |
  8. | sys |
  9. +--------------------+
复制代码

主库创建数据库clq并且加入数据:

  1. mysql> create database clq;
  2. Query OK, 1 row affected (0.00 sec)
  3. mysql> create table clq01(id int(11)not null primary key auto_increment,name varchar(100)not null,age tinyint(4));
  4. mysql> insert clq01(name,age) values('A',20),('B',21),('C',22);
  5. Query OK, 3 rows affected (0.00 sec)
复制代码

从库中查看:

  1. mysql> select * from clq01;
  2. +----+------+------+s
  3. | id | name | age |
  4. +----+------+------s+
  5. | 1 | A | 20 |
  6. | 2 | B | 21 |
  7. | 3 | C | 22 |
  8. +----+------+------+
  9. #主从复制完成!
复制代码


6.主从设置 (数据不同等 时)

6.1一样平常 全备主库必要 另开一个终端,给数据库加上读锁(只读不写)

避免其他人在写入数据导致不一样

  1. flush tables with read lock:
  2. quit:退出即可为解锁(备份完之后才能解锁)
复制代码

6.2确保主主数据库与从数据库的数据一样

  1. #先对主库进行全备
  2. [root@mysql01 ~]# mysqldump -uroot -A > all-databases.sql
  3. #拷贝数据到从数据库上
  4. [root@mysql01 ~]# ls /clq
  5. all-databases.sql
  6. [root@mysql01 ~]# scp /clq/all-databases.sql root@192.168.136.193:/clq/
  7. The authenticity of host '192.168.136.193 (192.168.136.193)' can't be established.
  8. ECDSA key fingerprint is SHA256:XIAQEoJ+M0vOHmCwQvhUdw12u5s2nvkN0A4TMKLaFiY.
  9. Are you sure you want to continue connecting (yes/no/[fingerprint])yes
  10. root@192.168.136.193's password:
  11. all-databases.sql 100% 853KB 115.4MB/s 00:00
  12. [root@mysql02 clq]# ll
  13. 总用量 896 #从库上查看
  14. -rw-r--r--. 1 root root 873266 5月 17 19:36 all-databases.sql
复制代码

6.3在从库上查看主库有哪些库,确保同等

  1. [root@mysql02 clq]# mysql -uroot -pHuawei0917@ < all-databases.sql
  2. mysql: [Warning] Using a password on the command line interface can be insecure.
  3. [root@mysql02 clq]# mysql -uroot -pHuawei0917@ -e 'show databases;'
  4. mysql: [Warning] Using a password on the command line interface can be insecure.
  5. +--------------------+
  6. | Database |
  7. +--------------------+
  8. | information_schema |
  9. | clq |
  10. | mysql |
  11. | performance_schema |
  12. | sys |
  13. +--------------------+
  14. 主库:
  15. mysql> show databases;
  16. +--------------------+
  17. | Database |
  18. +--------------------+
  19. | information_schema |
  20. | clq |
  21. | mysql |
  22. | performance_schema |
  23. | sys |
  24. +--------------------+
复制代码

6.4确保俩库的设置 文件已经设置 了相应的文件

  1. [root@mysql01 ~]# cat /etc/my.cnf
  2. [mysqld]
  3. basedir = /usr/local/mysql
  4. datadir = /opt/data
  5. socket = /tmp/mysql.sock
  6. port = 3306
  7. pid-file = /opt/data/mysql.pid
  8. user = mysql
  9. skip-name-resolve
  10. log-bin=mysql_bin #日志文件
  11. server-id=10 #唯一标识服务id
  12. [root@mysql02 ~]# cat /etc/my.cnf
  13. [mysqld]
  14. basedir = /usr/local/mysql
  15. datadir = /opt/data
  16. socket = /tmp/mysql.sock
  17. port = 3307
  18. user = mysql
  19. pid-file = /opt/data/mysql.pid
  20. skip-name-resolve
  21. #skip-grant-tables
  22. server-id=20 #唯一标识服务id(大于主库)
  23. relay-log=mysql_relay_log #中继日志
  24. #log-bin=mysql-bin
复制代码

此后步骤和5.5之后千篇一律 !

小结:

主库修改数据,从库的数据随之改变!
反之,从库修改数据,主库的数据不会发生改变

查看数据库运行的下令 历程

  1. mysql> show processlist;
  2. +----+------+-----------------------+------+-------------+------+---------------------------------------------------------------+------------------+
  3. | Id | User | Host | db | Command | Time | State | Info |
  4. +----+------+-----------------------+------+-------------+------+---------------------------------------------------------------+------------------+
  5. | 5 | repl | 192.168.136.219:39788 | NULL | Binlog Dump | 1575 | Master has sent all binlog to slave; waiting for more updates | NULL |
  6. | 7 | root | localhost | NULL | Query | 0 | starting | show processlist |
  7. +----+------+-----------------------+------+-------------+------+---------------------------------------------------------------+------------------+
  8. 2 rows in set (0.00 sec)
复制代码

以上就是MySQL数据库主从复制原理及作用分析的具体 内容,更多关于MySQL数据库主从复制的资料请关注脚本之家别的 干系 文章!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

avatar 123456809 | 2021-9-18 14:07:39 | 显示全部楼层
没人理我,好伤心啊!
回复

使用道具 举报

avatar 温柔老虎 | 2021-9-26 10:20:56 | 显示全部楼层
有节操!
回复

使用道具 举报

avatar 普通人物怨 | 2021-10-3 05:07:27 | 显示全部楼层
我只是来赚积分的!
回复

使用道具 举报

avatar 做农告根乎 | 2021-10-3 05:48:00 | 显示全部楼层
admin楼主,替我问候您主治大夫!
回复

使用道具 举报

avatar 凌8乱 | 2021-10-3 05:51:45 | 显示全部楼层
admin楼主很有艺术范!
回复

使用道具 举报

avatar 哲911 | 2021-10-3 13:48:54 | 显示全部楼层
强,我和我的小伙伴们都惊呆了!
回复

使用道具 举报

avatar 心一路向南飞该 | 2021-10-4 13:16:06 | 显示全部楼层
顶!顶!顶!
回复

使用道具 举报

avatar 岳兄弟散养家鸡 | 2021-10-6 12:16:03 | 显示全部楼层
禽兽不如应该不是说admin楼主的的吧?
回复

使用道具 举报

avatar 后会无期846 | 2021-10-14 14:15:06 | 显示全部楼层
有机会找admin楼主好好聊聊!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则