데이터 베이스 MySQL 튜토리얼 mysql数据库自动备份且恢复破坏数据方法

mysql数据库自动备份且恢复破坏数据方法

Jun 07, 2016 pm 05:51 PM
MySQL 백업 자동 백업

介绍数据库自动备份以及数据库被破坏后的恢复的方法。在这里,我们使用mysqlhotcopy,并且定义一段Shell脚本来实现数据库的自动备份,并且,让整个数据自动备份与数据恢复过程都基于Shell。

建立备份所需条件

[1] 建立自动备份脚本

在这里,为了使数据库备份和恢复的符合我们的实际要求,用一段符合要求的Shell脚本来实现整个备份过程的自动化。

 代码如下 复制代码
[root@CentOS ~]# vi -backup.sh ← 建立数据库自动备份脚本,如下:
#!/bin/bash
PATH=/usr/local/sbin:/usr/bin:/bin
# The Directory of Backup
BACKDIR=/backup/mysql
# The Password of MySQL
ROOTPASS=******** 此处请将星号替换成MySQL的root密码
# Remake the Directory of Backup
rm -rf $BACKDIR
mkdir -p $BACKDIR
# Get the Name of Database
DBLIST=`ls -p /var/lib/mysql | grep / | tr -d /`
# Backup with Database
for dbname in $DBLIST
do
mysqlhotcopy $dbname -u root -p $ROOTPASS $BACKDIR | logger -t mysqlhotcopy
done

[2] 运行数据库自动备份脚本

 代码如下 复制代码

[root@CentOS ~]# chmod 700 mysql-backup.sh 改变脚本属性,让其只能让root用户执行
[root@CentOS ~]# ./mysql-backup.sh 运行脚本
[root@CentOS ~]# ls -l /backup/mysql/ 确认一下是否备份成功
total 8
drwxr-x--- 2 mysql mysql 4096 Sep 1 16:54 mysql 已成功备份到/backup/mysql目录中

[3] 让数据库备份脚本每天自动运行

[root@sample ~]# crontab -e ← 编辑自动运行规则(然后会出现编辑窗口,操作同vi)
00 03 * * * /root/mysql-backup.sh 添加这一行到文件中,让数据库备份每天凌晨3点进行

 

测试自动备份正常运转与否(备份恢复的方法)

这里,以通过实际操作的过程来介绍问题出现后的恢复方法。

[1] 当数据库被删除后的恢复方法

首先建立一个测试用的数据库。

 代码如下 复制代码
[root@CentOS ~]# mysql -u root -p ← 用root登录到MySQL服务器
Enter password: ← 输入MySQL的root用户密码
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 8 to server version: 4.1.20
Type 'help;' or 'h' for help. Type 'c' to clear the buffer.
mysql> create database test; ← 建立一个测试用的数据库test
Query OK, 1 row affected (0.00 sec)
mysql> use test ← 连接到这个数据库
Database changed
mysql> create table test(num int, name varchar(50)); ← 在数据库中建立一个表
Query OK, 0 rows affected (0.07 sec)
mysql> insert into test values(1,'Hello,CentOS'); ← 插入一个值到这个表(这里以“Hello,CentOS”为例)
Query OK, 1 row affected (0.02 sec)
mysql> * from test; ← 查看数据库中的内容
+------+-----------------+
| num | name |
+------+-----------------+
|1 | Hello,Centos | ← 确认刚刚插入到表中的值的存在
+------+------------------+
1 row in set (0.01 sec)
mysql> exit ← 退出MySQL服务器
Bye

然后,运行刚才建立的数据库备份脚本,备份刚刚建立的测试用的数据库。

[root@sample ~]# cd ← 回到脚本所在的root用户的根目录
[root@sample ~]# ./mysql-backup.sh ← 运行脚本进行数据库备份

接下来,我们再次登录到MySQL服务器中,删除刚刚建立的测试用的数据库test,以便于测试数据恢复能否成功。

 代码如下 复制代码
[root@Centos ~]# mysql -u root -p ← 用root登录到MySQL服务器
Enter password: ← 输入MySQL的root用户密码
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 13 to server version: 4.1.20
Type 'help;' or 'h' for help. Type 'c' to clear the buffer.
mysql> use test ← 连接到测试用的test数据库
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> drop table test; ← 删除数据中的表
Query OK, 0 rows affected (0.04 sec)
mysql> drop database test; ← 删除测试用数据库test
Query OK, 0 rows affected (0.01 sec)
mysql> show databases;
+---------------+
| Database |
+---------------+
| mysql | ← 确认测试用的test数据库已不存在、已被删除
+---------------+
1 row in set (0.01 sec)
mysql> exit ← 退出MySQL服务器
Bye

以上,我们就等于模拟了数据库被破坏的过程。接下来,是数据库被“破坏”后,用备份进行恢复的方法。

[root@Centos ~]# /bin/cp -Rf /backup/mysql/test/ /var/lib/mysql/ ← 复制备份的数据库test到相应目录
[root@Centos ~]# chown -R mysql:mysql /var/lib/mysql/test/ ← 改变数据库test的归属为mysql
[root@Centos ~]# chmod 700 /var/lib/mysql/test/ ← 改变数据库目录属性为700
[root@Centos ~]# chmod 660 /var/lib/mysql/test/* ← 改变数据库中数据的属性为660

然后,再次登录到MySQL服务器上,看是否已经成功恢复了数据库。

 代码如下 复制代码

[root@CentOS ~]# mysql -u root -p ← 用root登录到MySQL服务器
Enter password: ← 输入MySQL的root用户密码
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 14 to server version: 4.1.20
Type 'help;' or 'h' for help. Type 'c' to clear the buffer.
mysql> show databases; ← 查看当前存在的数据库
+-------------+
| Database |
+-------------+
| mysql |
| test | ← 确认刚刚被删除的test数据库已经成功被恢复回来!
+------------+
2 rows in set (0.00 sec)
mysql> use test ← 连接到test数据库
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables; ← 查看test数据库中存在的表
+-------------------+
| Tables_in_test |
+-------------------+
| test |
+-------------------+
1 row in set (0.00 sec)
mysql> select * from test; ← 查看数据库中的内容
+------+---------------------+
| num | name |
+------+---------------------+
| 1 | Hello,CentOS | ← 确认数据表中的内容与删除前定义的“Hello,CentOS”一样!
+------+---------------------+
1 row in set (0.01 sec)
mysql> exit ← 退出MySQL服务器
Bye

以上结果表示,数据库被删除后,用备份后的数据库成功的将数据恢复到了删除前的状态

 

2] 当数据库被修改后的恢复方法

数据库被修改,可能存在着多方面的原因,被入侵、以及相应程序存在Bug等等,这里不作详细介绍。这里将只介绍在数据库被修改后,如果恢复到被修改前状态的方法。

具体和上面所述的“数据库被删除后的恢复方法”相类似。这里,测试用数据库接着使用刚刚在前面用过的test。这里为了使刚刚接触数据库的朋友不至于理解混乱,我们再次登录到MySQL服务器上确认一下刚刚建立的测试用的数据库test的相关信息。

 代码如下 复制代码
[root@CentOS ~]# mysql -u root -p ← 用root登录到MySQL服务器
Enter password: ← 输入MySQL的root用户密码
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 14 to server version: 4.1.20
Type 'help;' or 'h' for help. Type 'c' to clear the buffer.
mysql> show databases; ← 查看当前存在的数据库
+-------------+
| Database |
+-------------+
| mysql |
| test |
+------------+
2 rows in set (0.00 sec)
mysql> use test ← 连接到test数据库
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables; ← 查看test数据库中存在的表
+-------------------+
| Tables_in_test |
+-------------------+
| test |
+-------------------+
1 row in set (0.00 sec)
mysql> select * from test; ← 查看数据库中的内容
+------+--------------------+
| num | name |
+------+--------------------+
| 1 | Hello,CentOS|
+------+--------------------+
1 row in set (0.01 sec)
mysql> exit ← 退出MySQL服务器
Bye

然后,我们再次运行数据库备份脚本,将当前状态的数据库,再做一次备份。

[root@CentOS ~]# cd ← 回到脚本所在的root用户的根目录
[root@CentOS ~]# ./mysql-backup.sh ← 运行脚本进行数据库备份

接下来,我们再次登录到MySQL服务器中,对测试用的数据库test进行一些修改,以便于测试数据恢复能否成功。

 代码如下 复制代码
[root@sample ~]# mysql -u root -p ← 用root登录到MySQL服务器
Enter password: ← 输入MySQL的root用户密码
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 15 to server version: 4.1.20
Type 'help;' or 'h' for help. Type 'c' to clear the buffer.
mysql> use test ← 连接到test数据库
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> update test set name='Shit,Windows'; ← 然后将test中表的值重新定义为“Shit,Windows”(原来为“Hello,CentOS”)
Query OK, 1 row affected (0.07 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from test; ← 确认test中的表被定义的值
+------+--------------------+
| num | name |
+------+-------------------+
| 1 | Shit,Windows | ← 确认已经将原test数据库表中的值修改为新的值“Shit,Windows”
+------+-------------------+
1 row in set (0.00 sec)
mysql> exit ← 退出MySQL服务器
Bye

以上,我们就等于模拟了数据库被篡改的过程。接下来,是数据库被“篡改”后,用备份进行恢复的方法。

[root@CentOS ~]# /bin/cp -Rf /backup/mysql/test/ /var/lib/mysql/ ← 复制备份的数据库test到相应目录

然后,再次登录到MySQL服务器上,看数据库是否被恢复到了被“篡改”之前的状态。

 代码如下 复制代码
[root@CentOS ~]# mysql -u root -p ← 用root登录到MySQL服务器
Enter password: ← 输入MySQL的root用户密码
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 16 to server version: 4.1.20
Type 'help;' or 'h' for help. Type 'c' to clear the buffer.
mysql> use test ← 连接到test数据库
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select * from test; ← 查看数据库中的内容
+------+----------------+
| num | name |
+------+----------------+
| 1| Hello,CentOS | ← 确认数据表中的内容与被修改前定义的“Hello,CentOS”一样!
+------+----------------+
1 row in set (0.01 sec)
mysql> exit ← 退出MySQL服务器
Bye

以上结果表示,数据库被修改后,用备份后的数据库成功的将数据恢复到了被“篡改”前的状态。

测试后…

测试完成后,将测试用过的遗留信息删除。

 代码如下 复制代码
[root@CentOS ~]# mysql -u root -p ← 用root登录到MySQL服务器
Enter password: ← 输入MySQL的root用户密码
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 19 to server version: 4.1.20
Type 'help;' or 'h' for help. Type 'c' to clear the buffer.
mysql> use test ← 连接到test数据库
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> drop table test; ← 删除test数据库中的表
Query OK, 0 rows affected (0.01 sec)
mysql> drop database test; ← 删除测试用数据库test
Query OK, 0 rows affected (0.00 sec)
mysql> show databases; ← 查看当前存在的数据库
+-------------+
| Database |
+-------------+
| mysql | ← 确认测试用数据库test不存在、已被删除
+-------------+
1 row in set (0.00 sec)
mysql> exit ← 退出MySQL服务器
Bye

以上介绍了用我们自己建立的一段Shell脚本,通过mysqlhotcopy来备份数据库的方法。

对于许多个人爱好者来说,组建服务器可能不是很考虑数据被破坏以及数据被破坏后的恢复工作。但不能不说,对于服务器来说,数据破坏后的恢复效率也是区 别业余和专业的因素之一。所以笔者建议,在您配置好了Web服务器以及MySQL服务器等等的时候,千万不要急于应用它,而要想办法在有限的(硬件、软件)条件下使它“坚不可摧”之后,再考虑应用的问题。

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Windows 10에서 자동 백업을 비활성화하는 방법 Windows 10에서 자동 백업을 비활성화하는 방법 Apr 18, 2024 pm 07:49 PM

일부 Windows 10 사용자는 시스템과 함께 제공되는 자동 백업 기능이 사용 중에 활성화되는 것을 발견했습니다. 이 기능은 데이터 보안을 보장하는 데 도움이 되지만 일부 사용자는 저장 공간 고려 사항이나 기타 이유로 인해 계속 활성화할 필요성을 느끼지 못할 수도 있습니다. 기능. 따라서 Windows 10 시스템에서 자동 백업 기능을 끄려면 올바른 작업 단계가 특히 중요합니다. 다음으로, 이 기사에서는 이러한 요구가 있는 사용자의 참조 구현을 위해 Win10 시스템의 자동 백업 기능을 끄는 방법을 자세히 소개합니다. 닫기 방법 1. "win+i" 단축키를 사용하여 "설정" 페이지를 빠르게 열고, 새 페이지에 들어간 후 "업데이트 및 보안" 옵션을 클릭해야 합니다. 2. 열리는 새 인터페이스에서 왼쪽 열을 클릭합니다.

Quark Network Disk를 자동으로 백업하는 방법 - Quark Network Disk를 자동으로 백업하는 방법 Quark Network Disk를 자동으로 백업하는 방법 - Quark Network Disk를 자동으로 백업하는 방법 Mar 04, 2024 pm 11:00 PM

Quark Network Disk 소프트웨어도 사용하고 계시나요? 그런데 Quark Network Disk를 자동으로 백업하는 방법을 알고 계십니까? 아래 편집기에서 Quark Network Disk의 자동 백업 방법을 알려드리겠습니다. 아래에서 살펴보겠습니다. 데스크탑에서 Quark Network Disk를 엽니다. 내 아바타를 클릭하여 기본 인터페이스로 들어갑니다. Quark Network Disk 자동 백업 옵션을 클릭하여 켜십시오.

PHP로 MySQL 데이터베이스의 자동 백업을 구현하는 방법 PHP로 MySQL 데이터베이스의 자동 백업을 구현하는 방법 May 16, 2023 am 08:54 AM

인터넷 애플리케이션의 인기로 인해 데이터베이스 백업은 웹 사이트 운영 및 유지 관리, 데이터 보안에 특히 중요합니다. 수동 백업은 확실한 보호 기능을 제공할 수 있지만, 데이터 양이 많은 웹사이트의 경우 수동 백업은 확실히 번거롭고 시간이 많이 걸립니다. 현재 자동 백업 방법은 필수 선택이 되었습니다. 가장 널리 사용되고 이해하기 쉬운 자동 백업 방법 중 하나는 PHP 스크립트를 사용하여 MySQL 데이터베이스를 자동으로 백업하는 것입니다. 이 기사에서는 PHP를 사용하여 MySQL 데이터베이스의 자동 백업을 구현하는 방법을 소개합니다. 1. 내 백업

Xiaomi Wi-Fi에서 라우터 설정 자동 백업을 활성화하는 위치_Xiaomi Wi-Fi에서 라우터 설정 자동 백업을 활성화하는 방법 Xiaomi Wi-Fi에서 라우터 설정 자동 백업을 활성화하는 위치_Xiaomi Wi-Fi에서 라우터 설정 자동 백업을 활성화하는 방법 Mar 25, 2024 pm 06:11 PM

1. Xiaomi WiFi를 입력하고 오른쪽 하단에 있는 도구 상자를 클릭합니다. 2. 라우팅 설정을 찾습니다. 3. 라우터 구성 백업을 입력합니다. 4. 라우터 설정의 자동 백업을 켜려면 클릭하세요.

Windows 7에서 지정된 폴더를 자동으로 백업하는 방법 Windows 7에서 지정된 폴더를 자동으로 백업하는 방법 Mar 26, 2024 pm 06:01 PM

1. 그림과 같이 [Win+R] 키를 눌러 실행을 엽니다. 2. 그림과 같이 명령줄 창을 열려면 다음 창에 cmd를 입력합니다. 3. 명령줄에 robocopy를 입력합니다. 해당 매개변수 설명은 그림과 같습니다. 4. 예를 들어, E 드라이브 아래의 데모 폴더를 10분마다 자동으로 H 드라이브 아래의 데모 폴더에 백업하려면 다음 명령을 사용하십시오: robocopyE: decoD:demo/R:0/ W:0/MOT:10; 그림과 같이: 5. 위의 매개변수 R은 백업 실패 후 재시도 횟수를 나타내고, W는 재시도 간격을 나타내며, MOT는 시간 간격을 나타냅니다. 자동 백업의 경우 그림과 같습니다. 6 자동 백업이 완료되면 D 드라이브 아래에 자동으로 백업된 폴더가 표시됩니다.

PHP에서 Redis 데이터베이스의 자동 백업을 구현하는 방법 PHP에서 Redis 데이터베이스의 자동 백업을 구현하는 방법 May 15, 2023 pm 06:33 PM

인터넷 애플리케이션에 Redis 데이터베이스가 광범위하게 적용됨에 따라 점점 더 많은 기업과 개발자가 Redis 데이터베이스의 백업 및 보호에 관심을 갖기 시작했습니다. 자동 백업은 Redis의 보안을 보장하는 효과적인 수단입니다. 이 기사에서는 PHP를 사용하여 Redis 데이터베이스의 자동 백업을 구현하는 방법을 소개합니다. 1. Redis 데이터베이스 백업 Redis는 오픈 소스 키-값 데이터베이스로 기본 데이터 유형을 지원할 뿐만 아니라 목록, 해시 테이블, 세트와 같은 복잡한 데이터 구조도 지원합니다. Redis 백업은 다음과 같습니다.

Baidu Netdisk를 자동으로 백업하는 방법 Baidu Netdisk를 자동으로 백업하는 방법 Mar 01, 2024 pm 05:01 PM

Baidu Netdisk를 사용하는 과정에서 사진을 자동으로 백업할 수 있는 기능을 설정할 수 있습니다. 관심 있는 친구들이 저와 함께 구경해 보세요. 휴대폰에서 Baidu Netdisk 애플리케이션을 연 후 메인 인터페이스로 들어간 후 오른쪽 하단에 있는 "내" 버튼을 클릭하여 개인 센터 페이지로 들어갑니다. 다음으로, 페이지 하단에서 "설정 및 서비스" 옵션을 찾아 클릭하여 들어가고 "설정" 기능을 선택하여 설정 페이지를 엽니다. 2. 설정 페이지에 "자동 백업 설정"이 있습니다. 클릭하여 들어갑니다. 3. 다음으로 입력된 페이지에서 "앨범 백업" 항목을 클릭하여 들어갑니다. 4. 새 페이지로 이동하면 "사진 자동 백업" 뒤에 있는 전환 버튼이 표시됩니다. 해당 페이지의 원형 슬라이더를 클릭하여 설정하세요.

PHP에서 MongoDB 데이터베이스의 자동 백업을 구현하는 방법 PHP에서 MongoDB 데이터베이스의 자동 백업을 구현하는 방법 May 15, 2023 pm 05:01 PM

인터넷 기술의 지속적인 발전으로 인해 데이터베이스의 중요성은 더욱 부각되고 있습니다. 데이터베이스는 데이터를 저장하는 중요한 매개체입니다. 데이터베이스에 장애가 발생하면 데이터 손실, 데이터 불일치 등의 문제로 인해 기업에 막대한 손실이 발생합니다. 데이터 보안과 무결성을 보장하려면 백업 솔루션을 채택해야 합니다. 이 기사에서는 PHP를 사용하여 MongoDB 데이터베이스의 자동 백업을 구현하여 기업이 데이터 보안을 향상시키는 방법을 소개합니다. 1. MongoDB 백업 소개 MongoDB는 바다를 저장할 수 있는 새로운 비관계형 데이터베이스입니다.

See all articles