Centos下 Mysql同步备份

本文涉及的产品
RDS Agent(兼容OpenClaw),2核4GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介:

注释:MySQL支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护日志文件的一个索引以跟踪日志循环。服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知下一次更新。在实际项目中,两台分布于异地的主机上安装有MySQL数据库,两台服务器互为主备,客户要求当其中一台机器出现故障时,另外一台能够接管服务器上的应用,这就需要两台数据库的数据要实时保持一致,在这里使用MySQL的同步功能实现双机的同步复制。
以下是操作实例:
 

一、环境配置

1、主数据服务端:CentOS release 5.6    mysql-5.0.77-4.el5_5.4   IP:192.168.4.200

2、从数据客户端:CentOS release 5.69  mysql-server-5.0.95-5.el5_9  IP:192.168.4.244

二、在主、从数据库增加同步账号

1、在主库增加一个从库可以登录的账号

MySQL>
GRANT all privileges ON *.* TO 
tongbu@'192.168.4.244' IDENTIFIED BY '123456'; 
(注意:tongbu是用于同步的帐号,123456是tongbu的密码)

2、在从库增加一个主库可以登录的账号

 MySQL>
GRANT all privileges ON *.* TO 
tongbu@'192.168.4.200' IDENTIFIED BY '123456'; 
(注意:tongbu是用于同步的帐号,123456是tongbu的密码)

三、配置数据库参数

1、以root用户登录主库,修改主库my.cnf文件;

[root@jw01 mysql]# vim /etc/my.cnf

    [mysqld]下面增加以下的参数;

default-character-set=utf8
log-bin=MySQL-bin
relay-log=relay-bin
relay-log-index=relay-bin-index
server-id=1
master-host=192.168.4.244          #同步服务器的IP
master-user=tongbu                      #用于同步的帐号
master-password=123456           #用于同步帐号的密码
master-port=3306                         #同步服务器的端口
master-connect-retry=30                  #同步的时间间隔,单位是秒
binlog-do-db=zhubao              #需要同步的库,zhubao、HyDatabase、zentao、collect;
binlog-do-db=HyDatabase
binlog-do-db=zentao
binlog-do-db=collect
replicate-do-db=zhubao     
replicate-do-db=HyDatabase     
replicate-do-db=zentao   
replicate-do-db=collect    

2、以root用户登录从库,修改从库my.cnf文件;

[root@jw02 mysql]# vim /etc/my.cnf

    [mysqld]下面增加以下的参数;
 

default-character-set=utf8
log-bin=MySQL-bin
relay-log=relay-bin
relay-log-index=relay-bin-index
server-id=2
master-host=192.168.4.200
master-user=tongbu
master-password=123456
master-port=3306
master-connect-retry=30
binlog-do-db=zhubao
binlog-do-db=HyDatabase
binlog-do-db=zentao
binlog-do-db=collect
replicate-do-db=zhubao     
replicate-do-db=HyDatabase     

replicate-do-db=zentao     
replicate-do-db=collect

slave-net-timeout=60       #当slave从主数据库读取log数据失败
slave-skip-errors=all        #忽略错误的参数

3、手工执行数据库同步;

   在从库重启mysql

[root@jw02 mysql]# service mysqld restart
停止 mysqld:                                              [确定]
启动 mysqld:                                              [确定]

4、在从库上用root账户登录Mysql,执行;

MySQL> stop slave; 
MySQL> load data from master;
MySQL> start slave;

5、在主库重启Mysql;

[root@jw01 mysql]# service mysqld restart
停止 mysqld:                                                [确定]
启动 mysqld:                                                [确定]

6、查看数据库同步的状态;将显示同步进程的状态,如下所示,红色字体为slave进程状态,如果都为YES表示正常;如果有问题会有错误提示,为NO:

 mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.4.200
Master_User: tongbu
Master_Port: 3306
Connect_Retry: 30
Master_Log_File: MySQL-bin.000014
Read_Master_Log_Pos: 98
Relay_Log_File: relay-bin.000052
Relay_Log_Pos: 235
Relay_Master_Log_File: MySQL-bin.000014
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: zhubao,HyDatabase,zentao,collect
Replicate_Ignore_DB: 
Replicate_Do_Table: 
Replicate_Ignore_Table: 
Replicate_Wild_Do_Table: 
Replicate_Wild_Ignore_Table: 
Last_Errno: 0
Last_Error: 
Skip_Counter: 0
Exec_Master_Log_Pos: 98
Relay_Log_Space: 235
Until_Condition: None
Until_Log_File: 
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File: 
Master_SSL_CA_Path: 
Master_SSL_Cert: 
Master_SSL_Cipher: 
Master_SSL_Key: 
Seconds_Behind_Master: 0
1 row in set (0.01 sec)

7、测试数据库同步;

  将主库现有的数据手工同步到从库,我利用Navicat工具同步的元数据;

 在主库192.168.4.200下Collect库下增加了一个表名为:kk_test;

  查看是否已同步;有kk_test证明已经同步成功~~
 

mysql> use collect;
Database changed
mysql> show tables;
+-----------------------+
| Tables_in_collect     |
+-----------------------+
| fw_collect_item       | 
| fw_collect_purpose    | 
| fw_collect_site       | 
| fw_collect_site_cate  | 
| fw_collect_site_city  | 
kk_test               | 
+----------------------+
6 rows in set (0.00 sec)
 

四、主、从库同步出现问题如下:

1、查看发现Slave_IO_Running的状态是No;当slave从主数据库读取log数据失败后,等待多久重新建立连接并获取数据,在My.cnf配置文件中增加该参数,设置为60秒;

 slave-net-timeout=60

重启Mysql数据库后在测试;

2、数据库同步失效的解决

当数据同步进程失效后,首先手工检查slave主机当前备份的数据库日志文件在master主机上是否存在,在slave主机上运行;

mysql> show slave status\G; 

在master上检查当前的数据库列表;

 mysql> show master logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| MySQL-bin.000001 |       117 | 
| MySQL-bin.000002 |       117 | 
| MySQL-bin.000003 |       117 | 
| MySQL-bin.000004 |       117 | 
| MySQL-bin.000005 |       117 | 
| MySQL-bin.000006 |       117 | 
| MySQL-bin.000007 |       117 | 
| MySQL-bin.000008 |       117 | 
| MySQL-bin.000009 |       117 | 
| MySQL-bin.000010 |       117 | 
| MySQL-bin.000011 |       117 | 
| MySQL-bin.000012 |       826 | 
| MySQL-bin.000013 |      7062 | 
| MySQL-bin.000014 |     13900 | 
+------------------+-----------+
14 rows in set (0.00 sec)

如果slave主机上使用的的Master_Log_File对应的文件在master的日志列表中存在,在slave主机上开启从属服务器线程后可以自动同步:

MySQL> start slave;  

如果master主机上的日志文件已经不存在,则需要首先从master主机上恢复全部数据,再开启同步机制。

在slave主机上运行:

MySQL> stop slave;

在master主机上运行:

 MySQL> stop slave;

在slave主机上运行:

MySQL> load data from master; 
MySQL> reset master; 
MySQL> start slave;  

在master主机上运行:

MySQL> reset slave; 
MySQL>start slave;

注意:LOAD DATA FROM MASTER目前只在所有表使用MyISAM存储引擎的数据库上有效。

3、Slave_SQL_Running: No

进入slave服务器,运行:

 mysql> show slave status\G
 
.......
Relay_Log_File: localhost-relay-bin.000535
Relay_Log_Pos: 21795072
Relay_Master_Log_File: localhost-bin.000094
Slave_IO_Running: Yes
Slave_SQL_Running: No   #故障1
Replicate_Do_DB: 
Replicate_Ignore_DB: 

Last_Errno: 1050
                 Last_Error: Error 'Table 'diy_conf_part_dimension_meta' already exists' on query. Default database: 'zhubao'. Query: 'create table diy_conf_part_dimension_meta
(
   conf_part_dimension_meta_id smallint(6) not null,
   conf_part_dimension_id smallint(6) not null comment 'diy_conf_part_dimension.conf_part_dimension_id
            ',

   primary key (conf_part_dimension_meta_id)      #故障2
)'
       ......

故障1:解决办法一
Slave_SQL_Running: No
1.程序可能在slave上进行了写操作
2.也可能是slave机器重起后,事务回滚造成的.

一般是事务回滚造成的:
解决办法:

 
mysql> slave stop;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> slave start;
 
 
解决办法二
首先停掉Slave服务:slave stop
到主服务器上查看主机状态:记录File和Position对应的值 
进入master
 
 
 mysql> show master logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| MySQL-bin.000001 | 117 | 
| MySQL-bin.000002 | 117 | 
| MySQL-bin.000003 | 117 | 
| MySQL-bin.000004 | 117 | 
| MySQL-bin.000005 | 117 | 
| MySQL-bin.000006 | 117 | 
| MySQL-bin.000007 | 117 | 
| MySQL-bin.000008 | 117 | 
| MySQL-bin.000009 | 117 | 
| MySQL-bin.000010 | 117 | 
| MySQL-bin.000011 | 117 | 
| MySQL-bin.000012 | 826 | 
| MySQL-bin.000013 | 7062 | 
| MySQL-bin.000014 | 13900 | 
+------------------+-----------+
14 rows in set (0.00 sec)
 
 
然后到slave服务器上执行手动同步:

mysql> change master to master_host='192.168.4.200',master_user='tongbu',
master_password='123456',master_log_file='MySQL-bin.0000014',master_log_pos=139000;

1 row in set (0.00 sec)

mysql> show slave status\G;
*************************** 1. row ***************************
........
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.4.200
Master_User: tongbu
Master_Port: 3306
Connect_Retry: 30
Master_Log_File: MySQL-bin.000014
Read_Master_Log_Pos: 13900
Relay_Log_File: relay-bin.000173
Relay_Log_Pos: 235
Relay_Master_Log_File: MySQL-bin.000014
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: zhubao,HyDatabase,zentao,collect
..........


手动同步需要停止master的写操作!

故障2:寻找参数设定忽略错误

mysql> show variables like "%slave%"; 
+---------------------------+-------+
| Variable_name             | Value |
+---------------------------+-------+
| init_slave                |       | 
| log_slave_updates         | OFF   | 
| slave_compressed_protocol | OFF   | 
| slave_load_tmpdir         | /tmp/ | 
| slave_net_timeout         | 60    | 
| slave_skip_errors         | OFF  | 
| slave_transaction_retries | 10    | 
+---------------------------+-------+
7 rows in set (0.00 sec)

在/etc/My.cnf 配置文件增加忽略错误的参数

slave-skip-errors=all

重新启动Mysqld服务;

在查看一下:

 
 mysql>  show variables like "%slave%";
+---------------------------+-------+
| Variable_name             | Value |
+---------------------------+-------+
| init_slave                |       | 
| log_slave_updates         | OFF   | 
| slave_compressed_protocol | OFF   | 
| slave_load_tmpdir         | /tmp/ | 
| slave_net_timeout         | 60    | 
slave_skip_errors         | ALL   
| slave_transaction_retries | 10    | 
+---------------------------+-------+
7 rows in set (0.00 sec)
 

4、 "Slave_IO_Running: No"MYSQL不同步;
show slave status\G;查看同步状态如下:
Slave_IO_Running: No
Slave_SQL_Running: Yes 

先stop slave 再reset slave再start slave就正常了。



本文转自 kuangling 51CTO博客,原文链接:http://blog.51cto.com/kling/1132562


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
8月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
894 6
|
9月前
|
安全 关系型数据库 MySQL
CentOS 7 yum 安装 MySQL教程
在CentOS 7上安装MySQL 8,其实流程很清晰。首先通过官方Yum仓库来安装服务,然后启动并设为开机自启。最重要的环节是首次安全设置:需要先从日志里找到临时密码来登录,再修改成你自己的密码,并为远程连接创建用户和授权。最后,也别忘了在服务器防火墙上放行3306端口,这样远程才能连上。
2302 16
|
10月前
|
存储 关系型数据库 MySQL
在CentOS 8.x上安装Percona Xtrabackup工具备份MySQL数据步骤。
以上就是在CentOS8.x上通过Perconaxtabbackup工具对Mysql进行高效率、高可靠性、无锁定影响地实现在线快速全量及增加式数据库资料保存与恢复流程。通过以上流程可以有效地将Mysql相关资料按需求完成定期或不定期地保存与灾难恢复需求。
759 10
|
存储 关系型数据库 MySQL
【赵渝强老师】使用select...into outfile语句备份MySQL
本文介绍了MySQL中使用`SELECT...INTO OUTFILE`语句将表数据导出为文本文件的方法。通过示例演示了如何备份员工表(emp)的数据,包括创建存储目录、设置权限、配置参数`secure_file_priv`以及解决相关错误的过程。字段分隔符和行终止符可自定义,确保数据格式符合需求。最后展示了备份文件的内容,验证操作成功。
706 36
|
存储 SQL 关系型数据库
【赵渝强老师】使用mysqldump备份MySQL
本文介绍了 MySQL 自带的逻辑备份工具 mysqldump 的使用方法。通过 mysqldump,可以将数据库中的数据转换为对应的 SQL 插入语句,便于备份和还原。文章详细说明了如何备份所有数据库、指定数据库及特定表,排除某些表不备份的操作,以及删除数据库后如何通过备份文件恢复数据。同时提供了视频讲解和具体命令示例,帮助用户更好地理解和应用该工具。
1238 5
|
关系型数据库 MySQL Linux
在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾
以上就是在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾的步骤。这个过程就像是一场接力赛,数据从MySQL数据库中接力棒一样传递到备份文件,再从备份文件传递到其他服务器,最后再传递回MySQL数据库。这样,即使在灾难发生时,我们也可以快速恢复数据,保证业务的正常运行。
601 28
|
存储 关系型数据库 MySQL
利用Cron表达式实现MySQL数据库的定时备份
以上就是如何使用Cron表达式和mysqldump命令实现MySQL数据库的定时备份。这种方法的优点是简单易用,而且可以根据需要定制备份的时间和频率。但是,它也有一些限制,例如,它不能备份MySQL服务器的配置文件和用户账户信息,也不能实现增量备份。如果需要更复杂的备份策略,可能需要使用专门的备份工具或服务。
415 15
|
存储 SQL 关系型数据库
【赵渝强老师】使用mydumper备份MySQL
本文介绍了使用mydumper工具进行MySQL数据库备份与恢复的操作方法。相比单线程工作的mysqldump,mydumper支持多线程,速度提升可达10倍。其功能包括事务性表快照、快速压缩、导出binlog等,并提供详细的参数说明和操作步骤。文章通过实例演示了安装mydumper、创建存储目录、全库备份、指定数据库及表备份、删除数据库以及使用myloader恢复数据的完整流程,并附带视频讲解,帮助用户更好地理解和应用该工具。
861 0
|
10月前
|
存储 Ubuntu Linux
VMware-安装CentOS系统教程及安装包
虚拟机相当于是一个独立于你电脑的环境,在这个环境上面,你可以安装Linux、Windows、Ubuntu等各个类型各个版本的系统,在这个系统里面你不用担心有病读等,不用担心文件误删导致系统崩溃。 虚拟机也和正常的电脑系统是一样的,也可以开关机,不用的时候,你关机就可以了,也不会占用你的系统资源,使用起来还是比较方便 这里也有已经做好的CentOS 7系统,下载下来解压后直接用VMware打开就可以使用
1617 69
|
9月前
|
存储 分布式计算 Linux
安装篇--CentOS 7 虚拟机安装
VMware 装 CentOS 7 不知道从哪下手?这篇超详细图文教程手把手教你在 VMware Workstation 中完成 CentOS 7 桌面系统的完整安装流程。从 ISO 镜像下载、虚拟机配置,到安装图形界面、设置用户密码,每一步都有截图讲解,适合零基础新手快速上手。装好之后无论你是要搭 Hadoop 集群,还是练 Linux ,这个环境都够你折腾一整天!
4123 3