MySQL主从复制原理与配置
2020-07-16 06:03
429 查看
文章目录
1. 主从概述
什么是mysql主从?
- mysql主从又叫mysql复制(同步),简单来说就是将A和B两个数据库做了主从之后,在A上面写入数据,B也会写入同样的数据,两者实现数据实时同步
主从有什么作用?
- 主库宕机后能够及时替换主库,保证业务可用性
- 主库负责写入数据,从库负责读取数据,实现读写分离,提高单个机器的I/O性能
主从有哪些形式?
- 一主一从 写入数据找主库,读取数据找从库
-
主主复制又叫双机热备,对任何一个数据库的操作都自动应用到另外一个数据库,始终保持两个数据库数据一致
-
扩展系统读取性能,当读取数据的需求量较多的时候适合使用一主多从
-
扩展系统写入性能,当写入数据量较多时适合使用多主一从
2. 主从复制原理
如上图所示:
- 主库收到外来的增、删、改操作
- 主库将收到的操作数据写入binlog日志中
- 从库上面的IO线程连接上主库,并请求binglog日志文件中的操作数据
- 主库生成log dump线程,通过log dump线程将binlog日志中的操作数据传输给从库的IO线程
- 从库的IO线程将收到的操作数据写入relay log(中继日志)中
- 从库的sql线程读取relay log(中继日志)中记录的操作数据
- 在从库中执行relay log(中继日志)中记录的操作,保持和主库的内容一致
3. 主从复制配置
配置步骤:
- 确保主从数据库数据一致
- 在主数据库中创建一个同步账号授权给从数据库使用
- 配置主数据库,修改其配置文件
- 配置从数据库,修改其配置文件
- 验证是否配置成功
配置实例:
需求:
搭建两台MySQL服务器,一台作为主服务器,一台作为从服务器,主服务器进行写操作,从服务器进行读操作,主数据库和从数据库要保持数据同步
环境:
角色 | 主机名 | IP | 系统版本/数据库版本 | 有无数据 |
---|---|---|---|---|
主数据库 | node1 | 192.168.207.129 | Centos7/mysql5.7 | 有数据 |
从数据库 | node3 | 192.168.207.131 | Centos7/mysql5.7 | 无数据 |
步骤:
注意:必须关闭防火墙,如果没有关闭可执行
systemctl stop firewalld来关闭防火墙
1.分别在主从数据库中安装
mysql5.7,此处可直接执行自动安装脚本,脚本在 《二进制格式安装MySQL5.7》 文章中有写
主数据库: [root@node1 ~]# ls abc.sh mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz [root@node1 ~]# bash abc.sh 从数据库: [root@node3 ~]# ls abc.sh mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz [root@node1 ~]# bash abc.sh
2.确保从数据库与主数据库里的数据一样
因为我们的数据库都是新装的所以数据肯定一样,但是需求环境中数据不一样,所以我们需要在主库中加入一点数据
//查看主库中的数据 [root@node1 ~]# mysql -uroot -p123 mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | aaabbbccc | | mysql | | performance_schema | | school | | sys | +--------------------+ 6 rows in set (0.00 sec) //查看从库中的数据 [root@node3 ~]# mysql -uroot -p123 mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.00 sec) //对主库进行全备 //全备之前需要新开一个终端,给数据库加上读锁,避免在备份期间有其他人在写入导致数据不一致 mysql> flush tables with read lock; Query OK, 0 rows affected (0.00 sec) mysql> //注意:在全备执行完成前,不要退出数据库和关闭此终端,否则读锁会失效 //在主库上做全备,并将全备文件传给从库 [root@node1 ~]# mysqldump -uroot -p123 --all-databases > all-202006190900.sql mysqldump: [Warning] Using a password on the command line interface can be insecure. [root@node1 ~]# scp all-202006190900.sql root@192.168.207.131:/root //解除主库的锁表状态,直接退出交互式界面即可 可以直接关闭终端或者quit退出数据库 mysql> quit Bye //在从库上恢复主库的全备文件,并查看数据是否和主库一致 [root@node3 ~]# mysql -uroot -p123 < all-202006190900.sql mysql: [Warning] Using a password on the command line interface can be insecure. [root@node3 ~]# mysql -uroot -p123 mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | aaabbbccc | | mysql | | performance_schema | | school | | sys | +--------------------+ 6 rows in set (0.00 sec)
3.在主库中创建一个同步账号给从库使用
mysql> grant replication slave on *.* to 'repl'@'192.168.207.131' identified by 'repl123'; Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)
4.配置主数据库
//编辑配置文件 [root@node1 ~]# vim /etc/my.cnf //添加下面两行内容 server-id = 10 //数据库服务器唯一标识符,主库的server-id值必须比从库的小 log-bin = mysql_bin //启用binlog日志 //重启数据库 [root@node1 ~]# service mysqld restart Shutting down MySQL.. SUCCESS! Starting MySQL. SUCCESS! //查看主库的状态 [root@node1 ~]# mysql -uroot -p123 mysql> show master status; +------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql_bin.000001 | 154 | | | | +------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec)
5.配置从数据库
//编辑配置文件 [root@node3 ~]# vim /etc/my.cnf //添加下面两行内容 server-id = 20 //数据库服务器唯一标识符 relay-log = myrelay_bin //启用中继日志relay-log //重启数据库 [root@node3 ~]# service mysqld restart Shutting down MySQL... SUCCESS! Starting MySQL.. SUCCESS! //配置并启动主从复制 [root@node3 ~]# mysql -uroot -p123 mysql> change master to -> master_host='192.168.207.129', -> master_user='repl', -> master_password='repl123', -> master_log_file='mysql_bin.000001', -> master_log_pos=154; Query OK, 0 rows affected, 2 warnings (0.03 sec) mysql> start slave; Query OK, 0 rows affected (0.01 sec) mysql> show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.207.129 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql_bin.000001 Read_Master_Log_Pos: 154 Relay_Log_File: myrelay_bin.000002 Relay_Log_Pos: 320 Relay_Master_Log_File: mysql_bin.000001 Slave_IO_Running: Yes //此行和下面一行必须为yes Slave_SQL_Running: Yes .......
6.验证是否配置成功
//在主库中写入数据 mysql> create database haha; Query OK, 1 row affected (0.00 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | aaabbbccc | | haha | | mysql | | performance_schema | | school | | sys | +--------------------+ 7 rows in set (0.00 sec) //在从库中查看是否同步 mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | aaabbbccc | | haha | | mysql | | performance_schema | | school | | sys | +--------------------+ 7 rows in set (0.00 sec)
相关文章推荐
- mysql(master/slave)主从复制原理及配置图文详解
- Mysql主从复制与读写分离原理及配置
- mysql主从复制的原理,配置方法及在线添加多个从库
- MySQL主从复制原理及基本配置
- MariaDB/Mysql之主从架构的复制原理及主从/双主配置详解(一)
- MySQL主从复制原理及配置
- MySQL主从复制的原理及配置
- Mysql主从复制的原理和配置
- MySQL 主从复制的原理和配置
- MySQL 主从复制的原理和配置
- Mysql之主从架构的复制原理及主从/双主配置详解(二)
- MySQL主从复制原理及配置
- MySQL高性能主从架构的复制原理及配置详解
- mysql主从复制的原理及配置实现
- MySQL 主从复制的原理和配置
- mysql主从复制的原理及配置实现
- mysql主从复制原理及配置步骤
- 【转载】mysql主从复制(实时热备)原理及配置
- MariaDB/Mysql之主从架构的复制原理及主从/双主配置详解(二)
- MySQL主从复制的原理及配置方法(比较详细)