首頁 資料庫 mysql教程 史上最全的MySQL备份方法_MySQL

史上最全的MySQL备份方法_MySQL

Jun 01, 2016 pm 01:20 PM
二進位 設定檔

bitsCN.com 本人曾经
用过的备份方式有:mysqldump、mysqlhotcopy、BACKUP TABLE 、SELECT INTO
OUTFILE,又或者备份二进制日志(binlog),还可以是直接拷贝数据文件和相关的配置文件。MyISAM
表是保存成文件的形式,因此相对比较容易备份,上面提到的几种方法都可以使用。Innodb 所有的表都保存在同一个数据文件 ibdata1
中(也可能是多个文件,或者是独立的表空间文件),相对来说比较不好备份,免费的方案可以是拷贝数据文件、备份 binlog,或者用
mysqldump。

1.mysqldump备份

mysqldump 是采用SQL级别的备份机制,它将数据表导成 SQL 脚本文件,在不同的 MySQL 版本之间升级时相对比较合适,这也是最常用的备份方法。
示例:mysqldump -uroot -p database table > /home/jobs/back.sql
mysqldump也可做增量备份,mysqldump相关参数网上较多,就不在此一一赘述了

2.mysqlhotcopy备份

mysqlhotcopy 是一个 PERL 程序。它使用 LOCK TABLES、FLUSH
TABLES 和 cp 或 scp
来快速备份数据库。它是备份数据库或单个表的最快的途径,但它只能运行在数据库文件(包括数据表定义文件、数据文件、索引文件)所在的机器上。
mysqlhotcopy 只能用于备份 MyISAM,并且只能运行在 类Unix 和 NetWare 系统上。
mysqlhotcopy 支持一次性拷贝多个数据库,同时还支持正则表达。
示例: root#/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=root
-p=123456 database /tmp (把数据库目录 database 拷贝到 /tmp
下)root#/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=root -p=123456
db_name_1 ... db_name_n /tmproot#/usr/local/mysql/bin/mysqlhotcopy
-h=localhost -u=root -p=123456 db_name./regex/
/tmp更详细的使用方法请查看手册,或者调用下面的命令来查看 mysqlhotcopy 的帮助:
perldoc /usr/local/mysql/bin/mysqlhotcopy注意,想要使用 mysqlhotcopy,必须要有
SELECT、RELOAD(要执行 FLUSH TABLES) 权限,并且还必须要能够有读取 datadir/db_name 目录的权限。

还原mysqlhotcopy 备份出来的是整个数据库目录,使用时可以直接拷贝到 mysqld
指定的 datadir (在这里是 /usr/local/mysql/data/)目录下即可,同时要注意权限的问题,如下例: root#cp
-rf db_name /usr/local/mysql/data/root#chown -R nobody:nobody
/usr/local/mysql/data/ (将 db_name 目录的属主改成 mysqld 运行用户)

3.SQL 语法备份

3.1 备份BACKUP TABLE 语法其实和 mysqlhotcopy
的工作原理差不多,都是锁表,然后拷贝数据文件。它能实现在线备份,但是效果不理想,因此不推荐使用。它只拷贝表结构文件和数据文件,不同时拷贝索引文
件,因此恢复时比较慢。例子: BACK TABLE tbl_name TO '/tmp/db_name/';注意,必须要有 FILE
权限才能执行本SQL,并且目录 /tmp/db_name/ 必须能被 mysqld 用户可写,导出的文件不能覆盖已经存在的文件,以避免安全问题。
恢复用 BACKUP TABLE 方法备份出来的文件,可以运行 RESTORE TABLE 语句来恢复数据表。例子: RESTORE TABLE FROM '/tmp/db_name/';权限要求类似上面所述。

3.2 SELECT INTO OUTFILE 则是把数据导出来成为普通的文本文件,可以自定义字段间隔的方式,方便处理这些数据。例子:
SELECT INTO OUTFILE '/tmp/db_name/tbl_name.txt' FROM tbl_name;注意,必须要有
FILE 权限才能执行本SQL,并且文件 /tmp/db_name/tbl_name.txt 必须能被 mysqld
用户可写,导出的文件不能覆盖已经存在的文件,以避免安全问题。
用 SELECT INTO OUTFILE 方法备份出来的文件,可以运行 LOAD DATA INFILE 语句来恢复数据表。例子: LOAD
DATA INFILE '/tmp/db_name/tbl_name.txt' INTO TABLE
tbl_name;权限要求类似上面所述。倒入数据之前,数据表要已经存在才行。如果担心数据会发生重复,可以增加 REPLACE
关键字来替换已有记录或者用 IGNORE 关键字来忽略他们。

4.启用二进制日志(binlog)

采用 binlog 的方法相对来说更灵活,省心省力,而且还可以支持增量备份。
启用 binlog 时必须要重启 mysqld。首先,关闭 mysqld,打开 my.cnf,加入以下几行:
server-id = 1
log-bin = binlog
log-bin-index = binlog.index
然后启动 mysqld 就可以了。运行过程中会产生 binlog.000001 以及 binlog.index,前面的文件是 mysqld
记录所有对数据的更新操作,后面的文件则是所有 binlog 的索引,都不能轻易删除。关于 binlog 的信息请查看手册。
需要备份时,可以先执行一下 SQL 语句,让 mysqld 终止对当前 binlog
的写入,就可以把文件直接备份,这样的话就能达到增量备份的目的了: FLUSH LOGS;如果是备份复制系统中的从服务器,还应该备份
master.info 和 relay-log.info 文件。
备份出来的 binlog 文件可以用 MySQL 提供的工具 mysqlbinlog 来查看,如:
/usr/local/mysql/bin/mysqlbinlog /tmp/binlog.000001该工具允许你显示指定的数据库下的所有
SQL 语句,并且还可以限定时间范围,相当的方便,详细的请查看手册。
恢复时,可以采用类似以下语句来做到: /usr/local/mysql/bin/mysqlbinlog /tmp/binlog.000001
| mysql -uyejr -pyejr db_name把 mysqlbinlog 输出的 SQL 语句直接作为输入来执行它。
如果你有空闲的机器,不妨采用这种方式来备份。由于作为 slave 的机器性能要求相对不是那么高,因此成本低,用低成本就能实现增量备份而且还能分担一部分数据查询压力,何乐而不为呢?

5.拷贝文件

直接备份数据文件相较前几种方法,备份数据文件最为直接、快速、方便,缺点是基本上不能实现增量备份。
为了保证数据的一致性,需要在靠背文件前,执行以下 SQL 语句: FLUSH TABLES WITH READ
LOCK;也就是把内存中的数据都刷新到磁盘中,同时锁定数据表,以保证拷贝过程中不会有新的数据写入。这种方法备份出来的数据恢复也很简单,直接拷贝回
原来的数据库目录下即可。
注意,对于 Innodb 类型表来说,还需要备份其日志文件,即 ib_logfile* 文件。因为当 Innodb 表损坏时,就可以依靠这些日志文件来恢复。

6.利用rsync备份
rsync作为同步工具也可以用来做备份,但要配置服务器端和客户端
示例rsync -vzrtopg --progress --delete root@192.168.1.3::root /tmp/
相关rsync配置可参考http://fanqiang.chinaunix.net/a6/b7/20010908/1305001258.html
缺点是rsync是根据文件修改时间做的增量备份,所以备份数据库都是全备,并且配置比较麻烦.

当然也可以参考下面的这篇文章
mysql 数据库备份和还原方法集锦bitsCN.com

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1318
25
PHP教程
1268
29
C# 教程
1248
24
如何在 Windows 11 上啟用或停用 eSIM 如何在 Windows 11 上啟用或停用 eSIM Sep 20, 2023 pm 05:17 PM

如果你從行動電信商購買了筆記型電腦,則很可能可以選擇啟動eSIM並使用手機網路將電腦連接到網路。有了eSIM,您無需將另一張實體SIM卡插入筆記型電腦,因為它已經內建。當您的裝置無法連接到網路時,它非常有用。如何檢查我的Windows11裝置是否相容於eSIM卡?點擊“開始”按鈕,然後轉到“網路和互聯網”>“蜂窩>設定”。如果您沒有看到「蜂窩行動網路」選項,則您的裝置沒有eSIM功能,您應該選取其他選項,例如使用行動裝置將筆記型電腦連接到熱點。為了激活和

超全! Python中常見的設定檔寫法 超全! Python中常見的設定檔寫法 Apr 11, 2023 pm 10:22 PM

為什麼要寫設定檔這個固定檔我們可以直接寫成一個.py 文件,例如settings.py 或config.py,這樣的好處就是能夠在同一工程下直接透過import 來導入當中的部分;但如果我們需要在其他非Python 的平台進行設定檔共用時,寫成單一.py 就不是一個很好的選擇。這時我們就應該選擇通用的設定檔類型來作為儲存這些固定的部分。目前常用且流行的設定檔格式類型主要有 ini、json、toml、yaml、xml 等,這些類型的設定檔我們都可以透過標準函式庫或第三方函式庫來進

如何在 Windows 11 中變更網路類型為專用或公用 如何在 Windows 11 中變更網路類型為專用或公用 Aug 24, 2023 pm 12:37 PM

設定無線網路很常見,但選擇或變更網路類型可能會令人困惑,尤其是在您不知道後果的情況下。如果您正在尋找有關如何在Windows11中將網路類型從公用變更為私有或反之亦然的建議,請繼續閱讀以取得一些有用的資訊。 Windows11中有哪些不同的網路設定檔? Windows11附帶了許多網路設定文件,這些設定檔本質上是可用於配置各種網路連線的設定集。如果您在家中或辦公室有多個連接,這將非常有用,因此您不必每次連接到新網路時都進行所有設定。專用和公用網路設定檔是Windows11中的兩種常見類型,但通

win10使用者設定檔在哪? Win10設定使用者設定檔的方法 win10使用者設定檔在哪? Win10設定使用者設定檔的方法 Jun 25, 2024 pm 05:55 PM

最近有不少Win10系統的使用者想要更改使用者設定文件,但不清楚具體如何操作,本文將為大家帶來Win10系統設定使用者設定檔的操作方法吧! Win10如何設定使用者設定檔1、首先,按下「Win+I」鍵開啟設定介面,並點選進入「系統」設定。 2、接著,在打開的介面中,點擊左側的“關於”,再找到並點擊其中的“高級系統設定”。 3、然後,在彈出的視窗中,切換到「」選項欄,並點擊下方「用戶配

EDVAC有哪兩個重大的改進 EDVAC有哪兩個重大的改進 Mar 02, 2023 pm 02:58 PM

EDVAC的兩個重大的改進:一是採用二進制,二是完成了存貯程序,可以自動地從一個程序指令進到下一個程序指令,其作業可以透過指令自動完成。 「指令」包括資料和程序,把它們用碼的形式輸入到機器的記憶裝置中,即用記憶資料的同一記憶裝置存貯執行運算的命令,這就是所謂存貯程序的新概念。

二進位演算法怎麼算 二進位演算法怎麼算 Jan 19, 2024 pm 04:38 PM

二進位演算法是一種基於二進制數的運算方法,其基本運算包括加法、減法、乘法和除法。除了基本運算外,二進位演算法還包括邏輯運算、位移運算等操作。邏輯運算包括與、或、非等操作,位移運算包括左移和右移操作。這些操作都有對應的規則和操作數的要求。

超全! Python 中常見的設定檔寫法 超全! Python 中常見的設定檔寫法 Apr 13, 2023 am 08:31 AM

為什麼要寫設定檔在開發過程中,我們常常會用到一些固定參數或是常數。對於這些較為固定且常用到的部分,往往會將其寫到一個固定檔案中,避免在不同的模組程式碼中重複出現從而保持核心程式碼整潔。這個固定文件我們可以直接寫成一個.py 文件,例如settings.py 或config.py,這樣的好處就是能夠在同一工程下直接透過import 來導入當中的部分;但如果我們需要在其他非Python 的平台進行設定檔共享時,寫成單一.py 就不是一個很好的選擇。這時我們就應該選擇通用的設定檔類型來

如何使用C語言將二進位轉換為十六進位? 如何使用C語言將二進位轉換為十六進位? Sep 01, 2023 pm 06:57 PM

二進制數以1和0表示。 16位元的十六進位數係統為{0,1,2,3…..9,A(10),B(11),……F(15)}為了從二進位表示轉換為十六進位表示,位元串id被分組為4位元區塊,從最低有效側開始稱為半位元組。每個區塊都替換為相應的十六進制數字。讓我們看一個範例,以清楚地了解十六進制和二進制數字表示。 001111100101101100011101 3  E  5  B&nb

See all articles