mysql主从配置

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

mysql 主从

MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据实时同步。

  • MySQL主从是基于binlog的,主上须开启binlog才能进行主从

    • binlog,其实就是一个文件,文件里记录了一些日志,文件是 二进制文件,无法cat
  • 主从过程大致有3个步骤:

    • 主将更改操作记录到 binlog 里
    • 从将主的binlog事件(sql语句)同步到本机上并记录在 relaylog(中继日志) 里
    • 从根据 relaylog 里面的sql语句按顺序执行
  • mysql主从共有三个线程

    • mysql 主从共有三个线程。主上有一个log dump 线程,用来和从的I/O 线程传递binlog;
    • 从上有两个线程,其中I/O 线程用来同步主的binlog并生成relaylog,另外一个sql线程用来把relaylog 里面的sql语句落地
  • mysql 主从原理图

pILg1S.jpg

  • mysql 主从应用场景

1、数据备份,主机器宕机,从机器还能随时供服务

2、作为一个从库,读的库,减轻主库的压力,数据备份且可以分担主机器被调用数据时的压力,mysql主从,是有方向性的,写数据,必须从主机器开始;如果不依照原理会导致数据紊乱。

准备工作

两台机器都安装并启动mysql。

配置主

编辑/etc/my.cnf配置文件
[root@localhost ~]# vim /etc/my.cnf
……
server-id=131
// 自定义
log_bin=testlinux
// 指定log前缀

重启mysql服务
[root@localhost ~]# /etc/init.d/mysqld restart
Shutting down MySQL.. SUCCESS! 
Starting MySQL. SUCCESS!

[root@localhost ~]# ls -l /data/mysql
-rw-rw----. 1 mysql mysql      120 123 21:00 testlinux.000001
-rw-rw----. 1 mysql mysql       19 123 21:00 testlinux.index
// 此时,/data/mysql目录下会产生两个新的文件
// 之后还会生成更多以testlinux开头的文件
// 这些文件都非常重要,是实现主从的根本,没有这些文件主从也无法完成

创建一个数据库为实验做准备
[root@localhost ~]# mysql -uroot -p
......
MySQL > create database testlinux;
Query OK, 1 row affected (0.00 sec)
// 二进制文件testlinux.000001 大小增加,它里面记录了数据库的创建过程。

创建一个用于同步数据的用户
[root@localhost ~]# mysql -uroot -p
......
mysql> grant replication slave on *.* to 'repl'@'192.168.159.132' identified by '112233';
Query OK, 0 rows affected (0.01 sec)
// IP为“从”的IP

mysql> flush tables with read lock;
Query OK, 0 rows affected (0.12 sec)
// 锁定数据表(目的是暂时使其不能继续写,保持现有状态用于同步)

mysql> show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| testlinux.000001  |   441    |              |                  |                   |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
#记住file和position(设置主从同步时会使用)
AI 代码解读
  • 备份主库中的所有数据库

    [root@localhost ~]# mysqldump -uroot -p112233 test > /tmp/test.sql

    [root@localhost ~]# mysqldump -uroot -p112233 zrlog > /tmp/zrlog.sql

    [root@localhost ~]# mysqldump -uroot -p112233 testlinux > /tmp/testlinux.sql

配置从

[root@localhost ~]# vim /etc/my.cnf
……
server-id=130
……

// 增加一个sever-id 和主不一样就行

重启mysql
[root@localhost ~]# /etc/init.d/mysqld restart
Shutting down MySQL.. SUCCESS! 
Starting MySQL. SUCCESS!

将主中备份的数据库发送到从中
[root@localhost ~]# scp 192.168.159.131:/tmp/*.sql /tmp/
The authenticity of host '192.168.159.131 (192.168.159.131)' can't be established.
ECDSA key fingerprint is b2:66:7f:db:00:38:59:11:9e:75:75:02:fd:7a:95:d7.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.159.131' (ECDSA) to the list of known hosts.
root@192.168.159.131's password: 
testlinux.sql                                                                        100%    0     0.0KB/s   00:00    
test.sql                                                                             100%    0     0.0KB/s   00:00    
zrlog.sql                                                                            100%    0     0.0KB/s   00:00    

创建库
[root@localhost ~]# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor. 
......
mysql> create database testlinux;
Query OK, 1 row affected (0.00 sec)
mysql> create database test;
Query OK, 1 row affected (0.00 sec)
mysql> create database zrlog;
Query OK, 1 row affected (0.00 sec)

恢复数据库
[root@localhost ~]# mysql -uroot -p159820 test < /tmp/test.sql
[root@localhost ~]# mysql -uroot -p159820 zrlog < /tmp/zrlog.sql
[root@localhost ~]# mysql -uroot -p159820 testlinux < /tmp/testlinux.sql

// 该过程要保证主从数据库内容一致

实现主从同步
[root@localhost ~]# mysql -uroot -p
.....
mysql> stop slave;
Query OK, 0 rows affected, 1 warning (0.06 sec)
mysql> change master to master_host='192.168.159.131',master_user='repl',master_password='112233',master_log_file='testlinux.000001',master_log_pos=441;
Query OK, 0 rows affected, 2 warnings (0.02 sec)
// IP为主的IP;file、pos分别为主的filename和position。
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

判断主从是否配置成功
mysql> show slave status\G
......
 Slave_IO_Running: Yes
 Slave_SQL_Running: Yes
 Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
......

解锁主库的表(在主上操作)
[root@localhost ~]# mysql -uroot -p
......
mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)
......
AI 代码解读

测试主从

  • 主上几个配置参数(在/etc/my.cnf中配置)

    • binlog-do-db= 仅同步指定的库
    • binlog-ignore-db= 忽略指定的库
  • 从上几个配置参数(在/etc/my.cnf中配置)

    • replicate_do_db= 同步指定的库
    • replicate_ignore_db= 忽略指定的库
    • replicate_do_table= 同步指定的表
    • replicate_ignore_table= 忽略指定的表

    • replicate_wild_do_table= 如aming.%,支持通配符
    • replicate_wild_ignore_table= 所有的忽略

注意: 进行从服务器的配置时尽量使用参数“replicatewild”,使匹配更精确,提升使用性能。

  • 测试

    主服务器:
    mysql> show tables;
    +---------------------------+
    | Tables_in_adaitest |
    +---------------------------+
    | columns_priv |
    | db |
    | event |
    +---------------------------+

    删除表:
    mysql> drop table db;
    mysql> show tables;
    +---------------------------+
    | Tables_in_adaitest |
    +---------------------------+
    | columns_priv |
    | event |
    +---------------------------+

    从服务器:
    主服务器删除表之前:
    mysql> show tables;
    +---------------------------+
    | Tables_in_adaitest |
    +---------------------------+
    | columns_priv |
    | db |
    | event |
    +---------------------------+

    主服务器删除表之后:
    mysql> show tables;
    +---------------------------+
    | Tables_in_adaitest |
    +---------------------------+
    | columns_priv |
    | event |
    +---------------------------+

本文转自 豆渣锅 51CTO博客,原文链接:http://blog.51cto.com/754599082/2064416

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
344
分享
相关文章
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
seatunnel配置mysql2hive
本文介绍了SeaTunnel的安装与使用教程,涵盖从安装、配置到数据同步的全过程。主要内容包括: 1. **SeaTunnel安装**:详细描述了下载、解压及配置连接器等步骤。 2. **模拟数据到Hive (fake2hive)**:通过编辑测试脚本,将模拟数据写入Hive表。 3. **MySQL到控制台 (mysql2console)**:创建配置文件并执行命令,将MySQL数据输出到控制台。 4. **MySQL到Hive (mysql2hive)**:创建Hive表,配置并启动同步任务,支持单表和多表同步。
152 15
mysql主从复制概述和配置
【10月更文挑战第22天】MySQL 主从复制是一种将主服务器的数据复制到一个或多个从服务器的技术,实现读写分离,提高系统性能和可用性。主服务器记录变更日志,从服务器通过 I/O 和 SQL 线程读取并应用这些变更。适用于读写分离、数据备份和恢复、数据分析等场景。配置步骤包括修改配置文件、创建复制用户、配置从服务器连接主服务器并启动复制进程。
286 1
2024Mysql And Redis基础与进阶操作系列(1)作者——LJS[含MySQL的下载、安装、配置详解步骤及报错对应解决方法]
Mysql And Redis基础与进阶操作系列(1)之[MySQL的下载、安装、配置详解步骤及报错对应解决方法]
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
478 2
Mysql中搭建主从复制原理和配置
主从复制在数据库管理中广泛应用,主要优点包括提高性能、实现高可用性、数据备份及灾难恢复。通过读写分离、从服务器接管、实时备份和地理分布等机制,有效增强系统的稳定性和数据安全性。主从复制涉及I/O线程和SQL线程,前者负责日志传输,后者负责日志应用,确保数据同步。配置过程中需开启二进制日志、设置唯一服务器ID,并创建复制用户,通过CHANGE MASTER TO命令配置从服务器连接主服务器,实现数据同步。实验部分展示了如何在两台CentOS 7服务器上配置MySQL 5.7主从复制,包括关闭防火墙、配置静态IP、设置域名解析、配置主从服务器、启动复制及验证同步效果。
282 0
Mysql中搭建主从复制原理和配置
docker应用部署---MySQL的部署配置
这篇文章介绍了如何使用Docker部署MySQL数据库,包括搜索和拉取MySQL镜像、创建容器并设置端口映射和目录映射、进入容器操作MySQL,以及如何使用外部机器连接容器中的MySQL。
docker应用部署---MySQL的部署配置
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
208 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
centos7 mysql安装及配置
本文详细介绍了在阿里云服务器ECS上通过yum源安装MySQL 8.0.12的过程,包括更新yum源、下载并安装MySQL源、解决安装过程中可能遇到的问题等步骤。此外,还介绍了如何启动MySQL服务、设置开机自启、配置登录密码、添加远程登录用户以及处理远程连接异常等问题。适合初学者参考,帮助快速搭建MySQL环境。
764 8
centos7 mysql安装及配置