Mysql的主主备份与主从备份--同步

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
RDS Agent(兼容OpenClaw),2核4GB
简介:

Mysql的主主备份与主从备份--同步

一:实验目标

mysql主从原理

实战:mysql主从配置

实战:mysql主主配置

 

二:实验环境

导入测试数据库book:

Mysql主xuegod63   IP:192.168.1.63

Mysql从xuegod64   IP:192.168.1.64

 

三:实验代码

实战:mysql主从配置 

服务概述:主从复制

    复制解决的基本问题是让一台服务器的数据和另外的服务器保持同步。 一台主服务器可以连接多台从服务器,并且从服务器也可以反过来作主服务器。主服务器和从服务器可以位亍丌同的网络拓扑中,还能对整台服务器、特定的数据库,甚至特定的表迚行复制。 主从服务器的版本必须一致,即使丌一致,主服务器版本可以是旧的,从服务器必须是新的版本。

 

复制解决的问题

MySQL复制技术有以下一些特点:

(1) 数据分布 (Data distribution )

(2) 负载平衡(load balancing)

(3) 备份(Backups)

(4) 高可用性和故障转移 High availability and failover

 

复制如何工作

整体上来说,复制有3个步骤:

(1) master将改发记录到二迚制日志(binary log)中(这些记录叨做二迚制日志事件,binary log events);

(2) slavemasterbinary log events拷贝到它的中继日志(relay log)

(3) slave重做中继日志中的事件,修改salve上的数据

 

服务概述:

wKiom1gxCh_QAQx6AAF9gYGp7Es360.png 

I/O  表示进和出,input和output

:运行过程

1:master输入一条规则,binary log会将其转换成二进制日志。在每个事务更新数据完成之前,master在二日志记录这些改变。MySQL将事务串行的写入二进制日志,即使事务中的语句都是交叉执行的。在事件写入二进制日志完成后,master通知存储引擎提交事务。
2:slave将master的binary log拷贝到它自己的中继日志。首先,slave开始一个工作线程——I/O线程。I/O线程在master上打开一个普通的连接,然后开始binlog dump process。Binlog dump process从master的二进制日志中读取事件,如果已经跟上master,它会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志。
3:SQL slave thread(SQL从线程)处理该过程的最后一步。SQL线程从中继日志读取事件,并重放其中的事件而更新slave的数据,使其与master中的数据一致。只要该线程与I/O线程保持一致,中继日志通常会位于OS的缓存中,所以中继日志的开销很小。
    

此外,在master中也有一个工作线程:和其它MySQL的连接一样,slave在master中打开一个连接也会使得master开始一个线程。复制过程有一个很重要的限制——复制在slave上是串行化的,也就是说master上的并行更新操作不能在slave上并行操作。

 

:复制配置 

有两台MySQL数据库服务器Master和slave,Master为主服务器,slave为从服务器,初始状态时,Master和slave中的数据信息相同,当Master中的数据发生变化时,slave也跟着发生相应的变化,使得master和slave的数据信息同步,达到备份的目的。

:要点:

负责在主、从服务器传输各种修改动作的媒介是主服务器的二进制变更日志,这个日志记载着需要传输从服务器的各种修改动作。因此,主服务器必须激活二进制日志功能。从服务器必须具备足以让它连接主服务器并请求主服务器把二进制变更日志传输给它的权限。

    一台主服务器可以连接多台从服务器,并且从服务器也可以反过来作主服务器。 

主服务器和从服务器可以位于不同的网络拓扑中,还能对整台服务器、特定的数据库,甚至特定的表迚行复制。 

主从服务器的版本必须一致,即使不一致,主服务器版本可以是旧的,从服务器必须是新的版本。 

 

3.1 . 复制解决的问题MySQL复制技术有以下一些特点: 

(1) 数据分布 (Data distribution )

(2) 负载平衡(load balancing)

(3) 备份(Backups)

(4) 高可用性和故障转移 High availability and failover

 

3.2 复制如何工作

整体上来说,复制有3个步骤:

(1) master将改发记录到二迚制日志(binary log)中(这些记录叨做二迚制日志事件,binary log events);

(2) slave将master的binary log events拷贝到它的中继日志(relay log);

(3) slave重做中继日志中的事件,修改salve上的数据。

 

模式:C/S 模式

端口: 3306

:实验步骤---实战mysql主从备份-同步

xuegod63 主mysql服务器配置 ---创建要同步的数据库: 

创建数据库

mysql> create database mk;

wKioL1gxCiyBjU-vAAAoj5TTfW0547.png 

mysql> use mk;

mysql> create table test1 (id int);

mysql> insert into test1 values(1)

wKioL1gxCjaR8fuLAAAR3FFiFNU926.png 

 

停止mysql服务 

[root@xuegod63 ~]# service mysql stop

 

编辑配置文件 

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

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

user=mysql

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0 #在原配置文件中,添加以下内容: 

log-bin=mysqllog #启用二迚制日志,默认存在/var/lib/mysql 下面

server-id=1 #本机数据库ID 标示。

binlog-do-db=mk #可以被从服务器复制的库。二制需要同步的数据库名

# binlog-ignore-db=mk2 可以被从服务器复制的库

 

重新启劢 mysql服务器

[root@xuegod63 ~]# service mysqld restart

 

授权给用户名为“slave”用户登录密码及权限

mysql> grant replication slave on *.* to slave@192.168.1.64 identified by "123456";

查看状态,信息

wKiom1gxCkGRwnWaAAAhgTP0OpM063.png 

 

数据库备份

[root@xuegod63 ~]# mysqldump -u root -p123456 --all-databases > all.sql

[root@xuegod63 ~]# ll -h all.sql

-rw-r--r-- 1 root root 514K Mar 27 00:54 all.sql

 

主服务器中的数据传给从服务器:复制前保证两个数据库数据一致: 

1):方法1:scp all.sql 192.168.1.64:/root

wKiom1gxCpfwQnh9AAAfhokB9DM726.png 

 

2:使用nc命令 

   NetCat,它短小精悍、功能实用,被设计为一个简单、可靠的网络工具,可通过TCP或UDP协议传输读写数据。同时,它还是一个网络应用Debug分析器,因为它可以根据需要创建各种不同类型的网络连接。

语法:

服务器端:nc収送数据的语法: nc -l 端口 < 要传输的文件

客户端: nc接叐数据的语法: nc 进程nc服务器端IP 端口 > 文件名

 

例:监听9999端口,当有客户端连接时,就把对应文件传送到来连接的客户端 

[root@xuegod63 ~]# rpm -qf `which nc `

nc-1.84-22.el6.x86_64

开启监听:

[root@xuegod63 ~]#nc -l 9999 < all.sql

[root@xuegod63 ~]# netstat -antup | grep 9999

tcp 0 0 0.0.0.0:9999 0.0.0.0:* LISTEN 15164/nc

 

测试接收: 

1)配置从服务器xuegod64 : 

[root@xuegod64 ~]# cd /opt/

[root@xuegod64 opt]# ls

[root@xuegod64 opt]# nc 192.168.1.63 9999 > ncall.sql

[root@xuegod64 opt]# diff ncall.sql /root/all.sql

============================================================

 wKiom1gxCsfwva9wAAA5gSr5OkI475.png

2):数据库版本相同

Mysql主服务器xuegod63

 

mysql从服务xuegod64

[root@xuegod64 opt]# yum install mysql-server -y  

[root@xuegod64 opt]# service mysqld restart

mysql>show variables like '%version%';查看版本

wKioL1gxCtTR18xuAAA3TAPs5Q4411.png 

 

测试连接到主服务器是否成功

[root@xuegod64 opt]# mysql -u slave -h 192.168.1.63 -p123456

wKioL1gxDCzhZn6YAAAYZE1_Uzs259.png 

 

从服务器导入数据库和主服务器保持一致

[root@xuegod64 ~]# mysql -u root -p < all.sql

Enter password:123456

[root@xuegod64 opt]# mysql -u root -p

Enter password:123456

wKiom1gxC-Hw77eyAAAikSwTafE707.png 

 

/////////////////////////////////////////////////////////////////////////注释:在这里可能会报错

wKioL1gxC7vxFMmQAAAiDS9TkSA711.png 

解决方法

方法操作流程很简单,如下:

# /etc/init.d/mysqld stop //停止MySQL服务的运行
# mysqld_safe --user=mysql --skip-grant-tables --skip-networking & //跳过受权表访问
# mysql -u root mysql //登录mysql

 

1:关闭mysqld服务

[root@xuegod64 ~]# service mysqld stop

2:跳过授权访问

[root@xuegod64 ~]#  mysqld_safe --user=mysql --skip-grant-tables --skip-networking &

3:修改数据库更新

[root@xuegod64 ~]# mysql -u root mysql#mysql5.7以下的版本如下:
mysql> UPDATE user SET Password=PASSWORD('newpassword') where USER='root' and host='127.0.0.1' or host='localhost';//把空的用户密码都修改成非空的密码就行了。
mysql> FLUSH PRIVILEGES;
mysql> quit

4:重启数据库并重设密码

[root@xuegod64 ~]# service mysqld start  :
[root@xuegod64 ~]# mysql -uroot -p
Enter password: <输入新设的密码newpassword>

/////////////////////////////////////////////////////////////////////////

 

修改从服务器配置文件:从服务器没必要开bin-log日志注。

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

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

user=mysql

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

#在配置文件中写入以下内容

server-id=2 #从服务器ID号,要和主ID相同 ,如果设置多个从服务器,每个从服务器必须有一个唯一的server-id值,必须主服务器以及其它从服务器的相同。可以认为server-id值类似亍IP地址:这些ID值能唯一识别复制服务器群集中的每个服务器实例。

master-host=192.168.1.63 #指定主服务器IP地址

master-user=slave #定在主服务器上可以行同步的用户名

master-password=123456 #定在主服务器上可以行同步的用户名密码

####以下可以

master-port = 3306 #同步所用的端口

master-connect-retry=60 #断点重新连接时间

 

重启mysql服务 

[root@xuegod64 ~]# service mysqld restart

 

测试: 主服务器上查看:

[root@xuegod63 ~]# mysql -u root -p

Enter password:  

mysql> show master status;

wKioL1gxCzjAPpBeAAAkYTvi34w223.png 

#证明主服务器成功

 

从服务器上查看:--#证明从服务器成功

[root@xuegod64 opt]# mysql -u root -p

Enter password:  

mysql> show slave status \G

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

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.1.63

Master_User: slave

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysqllog.000001

Read_Master_Log_Pos: 315

Relay_Log_File: mysqld-relay-bin.000002

Relay_Log_Pos: 459

Relay_Master_Log_File: mysqllog.000001

Slave_IO_Running: Yes #可以看到这两个Yes,说明从服务器安装成功。

Slave_SQL_Running: Yes

Slave_IO_Running :一个负责不主机的io通信

Slave_SQL_Running:负责自己的slave mysql迚程

 

测试:数据同步

xuegod63写数据: 

[root@xuegod63 ~]# mysql -u root -p

Enter password:

mysql> use mk;

mysql> show tables;

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

| Tables_in_mk |

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

| test1         |

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

1 row in set (0.00 sec)

mysql> insert into test1 values(5);

 

xuegod64读数据:

[root@xuegod64 opt]# mysql -u root -p

Enter password:

mysql> use mk;

wKioL1gxCyrSQK_IAAAPnCiytvo609.png 

排错:

同步之前如果怀疑主从数据同步可以采上面冷备份进程拷贝法或者在从服务器上命行同步方法。

 

 

 

实战:mysql主主配置 

mysql主:服务端:xuegod63.cn IP:192.168.1.63

mysql主:服务端:xuegod64.cn IP:192.168.1.64

 

配置xuegod64 : 身份1: xuegod63

                  身份2: xuegod63的从。

root@xuegod64 ~]# vim /etc/my.cnf

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

user=mysql

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

server-id=2

master-host=192.168.1.63

master-user=slave

master-password=123456

####to master

log-bin=mysqlslave-bin-log

binlog-do-db=mk

binlog-ignore-db=mysql #避免同步mysql用户 相关配置。

 

授权名为slave64用户登录密码及权限

[root@xuegod64 opt]# mysql -u root -p123456

mysql> grant replication slave on *.* to slave64@'192.168.1.63' identified by '123456';

[root@xuegod64 opt]# service mysqld restart

[root@xuegod64 ~]# mysql -u root -p  

Enter password:

wKioL1gxCxrh9wJKAAAhLNrXMZA500.png 

#说明xuegod64 作为mysql 主已经成功。

 

配置xuegod63 : 身份1: xuegod64的主。

                  身份2: xuegod64的从。

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

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

user=mysql

# Disabling symbolic-links is recommended to prevent assorted security risks

### to master -64

symbolic-links=0

log-bin=mysqllog

server-id=1

binlog-do-db=mk

 

### to slave -64

master-host=192.168.1.64

master-user=slave64

master-password=123456

replicate-do-db=mk

[root@xuegod63 ~]# service mysqld restart

[root@xuegod63 ~]# mysql -u root -p

Enter password:123456

mysql> show slave status \G;

ERROR 2006 (HY000): MySQL server has gone away

No connection. Trying to reconnect...

Connection id: 4

Current database: mk

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

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.1.64 #主服务器是64

Master_User: slave64  #授权的用户是slave64

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysqlslave-bin-log.000001

Read_Master_Log_Pos: 106

Relay_Log_File: mysqld-relay-bin.000002

Relay_Log_Pos: 260

Relay_Master_Log_File: mysqlslave-bin-log.000001

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB: mk

Replicate_Ignore_DB:

 

测试主主数据同步:

xuegod64主服务器 添加表

[root@xuegod64 ~]# mysql -u root -p  

Enter password:123456

mysql> use mk;

mysql> create table test2(id int);

mysql> create table xuegod (id int);

mysql> insert into test2 values(10);

mysql> insert into xuegod values(100);

 

xuegod63从服务器-测试

[root@xuegod63 ~]# mysql -u root -p

Enter password:123456

mysql> use mk;

wKiom1gxCweiA0j-AAAfDMBpGXI409.png

wKiom1gxCwfSMHjeAAAhHW6M8cc961.png

 










本文转自 于学康 51CTO博客,原文链接:http://blog.51cto.com/blxueyuan/1874710,如需转载请自行联系原作者

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
8月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
894 6
|
关系型数据库 MySQL Shell
MySQL 备份 Shell 脚本:支持远程同步与阿里云 OSS 备份
一款自动化 MySQL 备份 Shell 脚本,支持本地存储、远程服务器同步(SSH+rsync)、阿里云 OSS 备份,并自动清理过期备份。适用于数据库管理员和开发者,帮助确保数据安全。
|
10月前
|
存储 关系型数据库 MySQL
在CentOS 8.x上安装Percona Xtrabackup工具备份MySQL数据步骤。
以上就是在CentOS8.x上通过Perconaxtabbackup工具对Mysql进行高效率、高可靠性、无锁定影响地实现在线快速全量及增加式数据库资料保存与恢复流程。通过以上流程可以有效地将Mysql相关资料按需求完成定期或不定期地保存与灾难恢复需求。
760 10
|
存储 关系型数据库 MySQL
【赵渝强老师】使用select...into outfile语句备份MySQL
本文介绍了MySQL中使用`SELECT...INTO OUTFILE`语句将表数据导出为文本文件的方法。通过示例演示了如何备份员工表(emp)的数据,包括创建存储目录、设置权限、配置参数`secure_file_priv`以及解决相关错误的过程。字段分隔符和行终止符可自定义,确保数据格式符合需求。最后展示了备份文件的内容,验证操作成功。
706 36
|
存储 SQL 关系型数据库
【赵渝强老师】使用mysqldump备份MySQL
本文介绍了 MySQL 自带的逻辑备份工具 mysqldump 的使用方法。通过 mysqldump,可以将数据库中的数据转换为对应的 SQL 插入语句,便于备份和还原。文章详细说明了如何备份所有数据库、指定数据库及特定表,排除某些表不备份的操作,以及删除数据库后如何通过备份文件恢复数据。同时提供了视频讲解和具体命令示例,帮助用户更好地理解和应用该工具。
1241 5
|
关系型数据库 MySQL Linux
在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾
以上就是在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾的步骤。这个过程就像是一场接力赛,数据从MySQL数据库中接力棒一样传递到备份文件,再从备份文件传递到其他服务器,最后再传递回MySQL数据库。这样,即使在灾难发生时,我们也可以快速恢复数据,保证业务的正常运行。
602 28
|
存储 关系型数据库 MySQL
利用Cron表达式实现MySQL数据库的定时备份
以上就是如何使用Cron表达式和mysqldump命令实现MySQL数据库的定时备份。这种方法的优点是简单易用,而且可以根据需要定制备份的时间和频率。但是,它也有一些限制,例如,它不能备份MySQL服务器的配置文件和用户账户信息,也不能实现增量备份。如果需要更复杂的备份策略,可能需要使用专门的备份工具或服务。
416 15
|
存储 SQL 关系型数据库
【赵渝强老师】使用mydumper备份MySQL
本文介绍了使用mydumper工具进行MySQL数据库备份与恢复的操作方法。相比单线程工作的mysqldump,mydumper支持多线程,速度提升可达10倍。其功能包括事务性表快照、快速压缩、导出binlog等,并提供详细的参数说明和操作步骤。文章通过实例演示了安装mydumper、创建存储目录、全库备份、指定数据库及表备份、删除数据库以及使用myloader恢复数据的完整流程,并附带视频讲解,帮助用户更好地理解和应用该工具。
861 0
|
监控 关系型数据库 MySQL
Flink CDC MySQL同步MySQL错误记录
在使用Flink CDC同步MySQL数据时,常见的错误包括连接错误、权限错误、表结构变化、数据类型不匹配、主键冲突和
676 17
|
9月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
578 158

推荐镜像

更多