日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL命令之mysqldump -- 数据库备份程序

發布時間:2023/12/3 数据库 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL命令之mysqldump -- 数据库备份程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 命令介紹
  • 常用選項
  • 參考示例
    • 將指定數據表的數據導出為 SQL 腳本文件和文本文件
    • 將指定的多個數據表的數據導出為 SQL 腳本文件和文本文件
    • 將指定數據庫導出到腳本文件中
    • 將指定的多個數據庫導出到腳本文件中
    • 將指定的表導出到腳本文件中
    • 將指定數據庫中的多個表的數據導出到指定的文件中
    • 將數據表中滿足特定條件的記錄導出
    • 導出數據之后生成一個新的 binlog 文件
    • 導出指定數據庫的所有表結構
    • 導出指定數據表的數據,同時自定義導出數據的格式
    • 將指定數據庫的數據全部導出,并備份數據庫的一致性狀態,并在備份文件中記錄二進制日志最后的位置
    • 備份指定數據庫的數據,并在備份文件中記錄二進制日志最后的位置,而且刷新日志文件
    • 將一個 MySQL 服務器的數據庫的數據復制到另外一個 MySQL 服務器的數據庫中
    • 導出所有的數據庫到腳本文件中
    • 壓縮備份指定的數據庫
    • 將壓縮的備份數據文件解壓,并還原到當前的數據庫服務器中
    • 壓縮備份和還原數據
    • 結合 Linux 的 cron 命令實現定時備份數據
      • 定時執行備份命令語句
      • 定時執行備份腳本文件

命令介紹

mysqldump 是 MySQL 用于轉存儲數據庫的客戶端程序。它主要產生一系列的 SQL 語句,可以封裝到文件,該文件包含所有重建您的數據庫所需要的 SQL 命令語句,如 CREATE DATABASE,CREATE TABLE,INSERT 等等。可以用來實現輕量級的快速遷移或恢復數據庫。是 MySQL 數據庫實現邏輯備份的一種方式。

在日常維護工作當中經常會需要對數據進行導出操作,而 mysqldump 則是 MySQL 導出數據時經常用到的命令工具。

mysqldump 命令可用來轉儲數據庫進行備份或將數據轉移到另一個 SQL 服務器(不一定是 MySQL 服務器)。

注意:
1.復制整個數據庫目錄也可以備份數據庫,也是最直接有效的方式,但是只適用于使用了 MyISAM 引擎的數據庫,不適用于使用了 InnoDB 引擎的數據庫。
2.如果你在服務器上進行備份,并且表均為 MyISAM 表,應考慮使用 mysqlhotcopy,因為可以更快地進行備份和恢復。

常用選項

請參閱《MySQL命令之mysqldump的選項詳解》

參考示例

將指定數據表的數據導出為 SQL 腳本文件和文本文件

將數據庫 test 中的數據表 student 導出,導出的文件存放在 /root/test 目錄下:

[root@htlwk0001host ~]# mysqldump -u root -p -T /root/test test student; Enter password:

注:
1.選項 -u 指定登錄數據庫的用戶名;選項 -p 輸入登錄密碼;選項 -T 指定導出的數據文件的存放位置
2.執行上面的命令語句后,會得到兩個文件:student.sql 和 student.txt

將指定的多個數據表的數據導出為 SQL 腳本文件和文本文件

[root@htlwk0001host ~]# mysqldump -uroot -pqpw123.com -T /root/test qydpw td_appraise_dimension td_area;

注:
1.命令默認將路徑后面的 qydpw 解析為數據庫名稱,后面的詞語解析為數據表的名稱。
2.表名之間只能使用空格分隔。

將指定數據庫導出到腳本文件中

導出文件如果沒有指明路徑,默認是存放在用戶家目錄下。

語法格式:

mysqldump -u用戶名 -p密碼 數據庫名 > 導出的文件名

例如,將數據庫 test 導出到文件 test.sql 中:

[root@htlwk0001host ~]# mysqldump -uroot -p123456 test > test.sql

說明:
1.默認選項 -p 后面的是數據庫名稱
2.導出的腳本文件存放在當前工作目錄下
3.腳本文件中包含建表語句和插入數據的insert語句,不含創建數據庫的語句

將指定的多個數據庫導出到腳本文件中

[root@htlwk0001host ~]# mysqldump -uroot -p123456 --databases db1 db2 > /tmp/test.sql

將指定的表導出到腳本文件中

語法格式:

mysqldump -u 用戶名 -p密碼 數據庫名 表名 > 導出的文件名

例如,將數據庫 test 的表 student 導出到文件 student.sql 中:

[root@htlwk0001host ~]# mysqldump -uroot -p123456 test student > student.sql

注:
1.命令會自動識別處第一個詞語 test 是數據庫名稱,后面跟著是表的名稱。
2.如果要將表的數據導入到指定的文件中,切記,不能使用選項 -T 或者 --tab 指定文件存放的路徑,因為指定了文件存放的路徑,命令會自己另外生產兩個文件(一個是 .sql 文件,一個是 .txt 文件)存放在指定的路徑下,而你自己指定的文件也會生成,但是不會有任何數據。
3.生成的文件默認存放在當前工作目錄下。

將指定數據庫中的多個表的數據導出到指定的文件中

將數據庫 db1 中的表 a1 和 a2 導出到文件 /tmp/db1.sql 中:

[root@htlwk0001host ~]# mysqldump -uroot -p123456 --databases db1 --tables a1 a2 > /tmp/db1.sql

注:切記,如果要將數據導出到你自己指定的文件中,則不能使用選項 -T 或者 --tab 指定文件存放的路徑

將數據表中滿足特定條件的記錄導出

例如,導出數據庫 db1 中的表 a1 中的 id=1 的數據:

[root@htlwk0001host ~]# mysqldump -uroot -proot --databases db1 --tables a1 --where='id=1' > /tmp/a1.sql

例如,導出數據庫 db1 中的表 a1 中的 name='liaowenxiong' 的數據:

[root@htlwk0001host ~]# mysqldump -uroot -proot --no-create-info --databases db1 --tables a1 --where="name='liaowenxiong'" > /tmp/a1.sql

導出數據之后生成一個新的 binlog 文件

有時候會希望導出數據之后生成一個新的 binlog 文件,只需要加上 -F 參數即可:

[root@htlwk0001host ~]# mysqldump -uroot -proot --databases db1 -F > /tmp/db1.sql

導出指定數據庫的所有表結構

語法格式:

mysqldump -u user_name -p -d --add-drop-table database_name > outfile_name.sql

說明:
1.選項 -d 或 --no-data 表示不導出行數據
2.選項 --add-drop-table 表示在每個 create table 語句之前增加一個 drop table 語句
3.導出的腳本文件中的內容都是創建表的語句,不含創建數據庫的語句,不含插入數據的語句

例如,將數據庫 test 的數據結構導出到文件 test.sql 文件中:

[root@htlwk0001host ~]# mysqldump -uroot -p1234567 -d --add-drop-table test > test.sql

導出的 test.sql 的內容如下所示:

-- MySQL dump 10.13 Distrib 5.7.31, for Linux (x86_64) -- -- Host: localhost Database: test -- ------------------------------------------------------ -- Server version 5.7.31/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8mb4 */; /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; /*!40103 SET TIME_ZONE='+00:00' */; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;-- -- Table structure for table `dept_htlwk` --DROP TABLE IF EXISTS `dept_htlwk`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `dept_htlwk` (`deptno` varchar(50) NOT NULL COMMENT '部門代碼',`dname` varchar(50) NOT NULL COMMENT '部門名稱',`location` varchar(200) NOT NULL COMMENT '部門地址' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='部門表'; /*!40101 SET character_set_client = @saved_cs_client */;-- -- Table structure for table `emp_htlwk` --DROP TABLE IF EXISTS `emp_htlwk`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `emp_htlwk` (`empno` varchar(50) DEFAULT NULL COMMENT '職員代碼',`ename` varchar(50) DEFAULT NULL COMMENT '職員姓名',`job` varchar(50) DEFAULT NULL COMMENT '職員崗位',`salary` decimal(7,2) DEFAULT NULL COMMENT '職員月薪',`bonus` decimal(7,2) DEFAULT NULL COMMENT '獎金',`hiredate` date DEFAULT NULL,`mgr` varchar(50) DEFAULT NULL COMMENT '上級代碼',`deptno` varchar(50) DEFAULT NULL COMMENT '部門代碼' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='職員表'; /*!40101 SET character_set_client = @saved_cs_client */;

導出指定數據表的數據,同時自定義導出數據的格式

[root@htlwk0001host ~]# mysqldump -u root -p -T /root/test test student --fields-terminated-by '\t' --fields-enclosed-by '"' --lines-terminated-by '\n';

說明:
--fields-terminated-by 'string' # 字段分隔符
--fields-enclosed-by 'char' # 字段引用符
--fields-optionally-enclosed-by 'char' # 字段引用符,只在 char、varchar、text、date 等字段類型上生效
--fields-escaped-by 'char' # 轉義字符
--lines-terminated-by 'string' # 記錄結束符,即換行符

我們看下使用自定義格式導出的文本文件的內容:

[root@htlwk0001host ~]# cat /root/test/student.txt "00000000000000000001" "liaowenxiong" "18" \N \N "2021-09-25 02:40:51" "00000000000000000002" "liudehua" "28" \N \N "2021-09-25 02:40:51" "00000000000000000003" "zhangxueyou" "38" \N \N "2021-09-25 02:40:51"

可以看到字段值全部加上了雙引號。

將指定數據庫的數據全部導出,并備份數據庫的一致性狀態,并在備份文件中記錄二進制日志最后的位置

例如,將數據庫 test 的數據全部導出:

[root@htlwk0001host ~]# mysqldump -h10.10.30.241 -uadmin -p123456 --single-transaction --master-data=2 --triggers --routines --events test -T /data/backup/

注:
1.會將每個數據表導出成兩個文件:SQL 腳本文件和文本文件。

2.--single-transaction,會在導出數據之前寫入一個 START TRANSACTION SQL 語句,它僅對事務表(如InnoDB)有用,因為它會在啟動事務時轉儲數據庫的一致狀態,而不會阻塞任何應用程序。

3.--master-data=2,將二進制文件最后的位置記錄到備份文件中

在備份文件中你會看到下面這條語句:

CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=4544;

上面的語句表示你在備份數據的時候,二進制日志文件名稱是 mysql-bin.000001,而且在備份的時刻,二進制日志文件的最后的位置是 4544,那么將來你要恢復數據,可以從 4544 位置之后開始恢復,因為之前的數據你已經備份成了 SQL 腳本文件,你只要執行這個腳本文件就可以恢復數據了,但是位置 4544 之后發生的數據變化,你就要從這個位置往后慢慢找了。

4.--triggers,導出觸發器

5.--routines,導出存儲過程和函數

6.--events,Include Event Scheduler events for the dumped databases in the output. This option requires the EVENT privileges for those databases.

備份指定數據庫的數據,并在備份文件中記錄二進制日志最后的位置,而且刷新日志文件

[root@htlwk0001host ~]# mysqldump -uroot -pqpw123.com --lock-all-tables --triggers --routines --events --flush-logs --master-data=2 test > /root/test/test.sql

說明:
刷新日志文件,會生成一個新的日志文件,而新的日志文件并不是舊的日志文件的復制,我看過新舊日志文件的內容并不相同。

將一個 MySQL 服務器的數據庫的數據復制到另外一個 MySQL 服務器的數據庫中

語法格式:

[root@htlwk0001host ~]# mysqldump --host=host1 -uuser_name -p --opt source_db| mysql --host=host2 -uuser_name -p -C target_db

注:host2 主機上已經創建 target_db 數據庫。

例如,將當前數據庫服務器中的數據庫 qydpw 的數據全部復制到 IP 地址為 114.28.38.109 的數據庫服務器的數據庫 test 中:

[root@htlwk0001host ~]# mysqldump -uroot -p123456 --opt qydpw | mysql --host=114.28.38.109 -uroot -p123456 -C test [root@htlwk0001host ~]# mysqldump --host=192.168.80.137 -uroot -proot -C --databases test | mysql --host=192.168.80.133 -uroot -proot test

說明:
1.選項 -C 可以啟用壓縮傳遞。
2.如果沒有使用 --opt,mysqldump 就會把整個結果集裝載到內存中,然后導出。如果數據非常大就會導致導出失敗。

導出所有的數據庫到腳本文件中

該命令會導出包括系統數據庫在內的所有數據庫:

[root@htlwk0001host ~]# mysqldump -uroot -proot --all-databases > /tmp/all.sql

壓縮備份指定的數據庫

[root@htlwk0001host ~]# mysqldump -uroot -p123456 -P3306 -q -Q --set-gtid-purged=OFF --default-character-set=utf8 --hex-blob --skip-lock-tables --databases test | gzip >/root/test/test.sql.gz[root@htlwk0001host ~]# mysqldump -uroot -p123456 -P3306 -q -Q --set-gtid-purged=OFF --default-character-set=utf8 --hex-blob --skip-lock-tables --databases test 2>/root/test/test.err | gzip >/root/test/test.sql.gz

說明:其中的語句 2>/root/test/test.err 表示將標準錯誤內容重定向到文件 test.err 中,如文件存在內容則清空。2> 表示錯誤輸出重定向。

將壓縮的備份數據文件解壓,并還原到當前的數據庫服務器中

[root@htlwk0001host ~]# gunzip -c test.sql.gz | mysql -uroot -pqpw123.com -vvv -P3306 --default-character-set=utf8 1> test.log 2> test.err

說明:
1.1> test.log 執行過程信息標準輸出重定向到文件 test.log 中
2.2> test.err 將標準錯誤內容重定向到文件 test.err 中,如文件存在內容則清空

壓縮備份和還原數據

[root@htlwk0001host ~]# mysqldump -hhost_name -uuser_name -ppassword --databases db_name | gzip > backup-file.sql.gz

對應的還原動作為:

[root@htlwk0001host ~]# gunzip < backup-file.sql.gz | mysql -uuser_name -ppassword db_name

注意:如果數據庫服務器中不存在 db_name,執行上面的還原語句會報錯,把 db_name 去掉即可

結合 Linux 的 cron 命令實現定時備份數據

定時執行備份命令語句

比如需要在每天凌晨 1:30 備份某個主機上的所有數據庫并壓縮 dump 文件為 gz 格式,那么可在 /etc/crontab 配置文件中加入下面代碼行:

30 1 * * * root mysqldump -u root -pPASSWORD --all-databases | gzip > /mnt/disk2/database_`date '+%m-%d-%Y'`.sql.gz

前面5個參數分別表示分鐘、小時、日、月、年,星號表示任意。date '+%m-%d-%Y' 得到當前日期的 MM-DD-YYYY 格式。

定時執行備份腳本文件

編寫 Shell 腳本備份 MySQL 數據庫:

[root@htlwk0001host ~]# vi /backup/backup.sh #!bin/bash cd /backup echo "You are in backup dir" mv backup* /oldbackup echo "Old dbs are moved to oldbackup folder" File = backup-$Now.sql mysqldump -u user -p password database-name > $File echo "Your database backup successfully completed"

上面腳本文件保存為 backup.sh,并且系統中已經創建兩個目錄 /olcbackup 和 /backup。每次執行 backup.sh 時都會先將 /backup 目錄下所有名稱以 backup 開頭的文件移到 /oldbackup 目錄下。

為上述腳本制定執行計劃如下:

[root@htlwk0001host ~]# crontab -e 30 1 * * * /backup.sh

總結

以上是生活随笔為你收集整理的MySQL命令之mysqldump -- 数据库备份程序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 爽爽视频在线观看 | 超碰狠狠操 | 翔田千里一区二区 | 极品美妇后花庭翘臀娇吟小说 | 欧美日韩国产在线 | 欧美xxxⅹ性欧美大片 | 人人超碰97| 欧美另类在线视频 | 亚洲国产毛片aaaaa无费看 | 午夜三级网站 | 美女黄视频大全 | 女性向av免费网站 | av av在线| 亚洲激情 | 国产精品视频网址 | 台湾三级伦理片 | 国产超碰人人模人人爽人人添 | 日日噜噜夜夜爽爽 | 亚洲淫片 | 91久久久久久久久久久 | 亚洲成人生活片 | 99久久婷婷国产一区二区三区 | 欧美日韩一二三区 | 11孩岁女毛片 | 国产激情视频一区 | 色天使在线视频 | 北条麻妃青青久久 | 视频一区二区三区精品 | 岛国一区 | xx99小雪| 国内精久久久久久久久久人 | 国产成人无码一区二区在线观看 | 午夜两性网 | 精品影视一区二区 | 在线视频第一页 | 精品国产va久久久久久久 | 色欲无码人妻久久精品 | 麻豆精品国产传媒av绿帽社 | 午夜伦理福利视频 | 欧美性受xxxx黑人xyx性 | 中文字幕日本在线观看 | 女生和男生一起插插插 | 日韩成人综合网 | 色香蕉网 | 国产精品成人久久 | 中文字幕永久免费 | 蜜桃av噜噜一区二区三区 | 成年人看的视频网站 | 激情导航| 色图社区 | 久久午夜精品视频 | 亚洲av日韩av永久无码下载 | 中文字幕人乱码中文字 | 黄色喷水视频 | 五月情网 | 极品少妇xxxx精品少妇 | 一级看片 | 超碰在线免费公开 | 爽爽爽av| 日韩片在线观看 | 人人射人人 | 欧美成人aaaaⅴ片在线看 | gai免费观看网站外网 | a黄视频 | 成人网在线播放 | 色欲av伊人久久大香线蕉影院 | 国产黄色大片免费看 | 成人在线视频网址 | 国产高清一区在线 | 伊人国产一区 | 日本色站 | 成人激情免费 | 欧美7777 | 国产第一页av | 黄色精品视频 | 欧美三级一区 | 一区二区三区在线观看免费 | 亚洲成人999 | 六月综合激情 | 日韩成人中文字幕 | 亚洲乱码中文字幕久久孕妇黑人 | 日韩va视频 | 国产毛片毛片毛片毛片 | 亚洲综合视频一区 | 亚洲 美腿 欧美 偷拍 | 激情久久久久久久 | 污视频网站在线播放 | 国产美女作爱视频 | 不卡视频一区二区三区 | 泽村玲子在线 | 成人性生交生交视频 | 精品国产aⅴ麻豆 | 欧美成人a交片免费看 | 国产在线xx | 福利小视频在线 | 男人的天堂av女优 | 99热这里只有精品首页 | 男ji大巴进入女人视频 | www日本免费|