mysqldump備份數據時網站訪問過慢[甚至無法訪問]解決辦法

現在大多數網站使用都是數據庫mysql或者mariadb數據庫,因爲最直接的原因就是他是開源的的,不需要支付二外的費用,並且性能也很不錯,這也是mysql和mariadb如此受人們喜歡的原因。那麼我們在進行的數據庫的備份的時候,如何正確的備份數據庫呢?特別是生產環境,因爲網站正在訪問的時候,不能關閉網站備份吧。

 

如果瀏覽不順暢請到原文章出處:https://www.sky8g.com/technology/3089/

請注意可能會提示風險,這是CSDN網站設置的問題,如果文章內的鏈接不是他們的網址,都會對用戶提示有風險,請點擊繼續訪問,本網站全部文章爲免費技術分享,請放心訪問,無需擔心。

請點擊此處查看完整文章:https://www.sky8g.com/technology/3089/
此篇文章是由SKY8G網作者原創,禁止抄襲。

 

 

於是我們就使用mysqldump命令進行壓縮備份mysqldump -hhostname -uusername -ppassword databasename | gzip > backupfile.sql.gz 或者不壓縮mysqldump -hhostname -uusername -ppassword databasename > backupfile.sql.gz但是在備份的過程中我們可以看到cpu的負載極具上升,並且網站打開非常慢甚至打不開,瀏覽器一直轉圈。

這是我們就要想辦法了,經過多次百度查詢最終找到解決辦法:如下進行熱備份纔是最靠譜的,這樣網站又可以訪問又不影響備份。在執行下面的解決辦法之前我們首先要看看數據庫時候支持熱備份嗎?

首先我們要查看數據庫表的存儲引擎,如果是Engine可以進行,還好我的數據庫是這個引擎。

1

SHOW TABLE STATUS

第二步若果是Engine引擎執行下面的命令進行備份

1

mysqldump -uuser -ppass --single-transaction --routines --triggers --all-databases > backup_db.sql

--single-transaction 生成一個檢查點,該檢查點允許備份在接收傳入更改時捕獲檢查點之前的所有數據。這些傳入的更改不會成爲備份的一部分。這確保了所有表都具有相同的時間點。

--routines 備份所有存儲過程和存儲函數。

--triggers 備份具有它們的每個表的所有觸發器。

 Info! 通過這個可以在生產環境進行備份了,特別是大數據的時候,非常管用。

下面我們要了解下數據有幾種備份類型。

  1. 數據庫備份類型
  2. mysqldump命令備份數據庫
  3. mysqldump壓縮與未壓縮備份
  4. mysqldump命令導入(恢復)數據庫
  5. mysqldump的定時計劃任務

數據庫備份類型

備份類型 描述
邏輯備份 這種類型的備份是通過使用create database、create table和insert等SQL語句保存表示邏輯數據庫結構的信息來創建的。當您想要從一個MySQL版本升級到另一個版本時,這種類型的備份是理想的,但是它是一種較慢的備份方法。
物理備份 這種類型的備份是對實際數據庫文件或磁盤分區的備份,這種類型的備份可以非常快地進行備份和恢復。
完整備份 完整備份是包含數據庫中所有內容的獨立備份,然後可以在另一臺服務器上恢復。完整備份可以是邏輯備份,也可以是物理備份。
增量備份 這種類型的備份只包含上次備份更改後的數據。這種類型的備份的優點是速度更快,因爲沒有太多的數據要備份,但是缺點是需要更長的時間來恢復。
固定點備份 這是在確切時刻的備份,通常您關閉數據庫(或靜止模式)然後進行備份。
熱備份 在數據庫運行時採用這種類型的備份,在備份期間不會阻止讀取和寫入
溫備份 這種類型的備份是在數據庫運行時進行的,但是不會阻止讀取,但禁止寫入對數據庫進行任何修改。
冷備份 類似於固定點的備份,因爲數據庫在備份開始之前關閉

 

關於備份的類型我們討論已經足夠多了,讓我們來看看如何進行備份,MySQL可以使用很多備份工具,見下表

Backup tools for MySQL

Backup method

Storage engine

Impact

Backup speed

Recovery speed

Recovery granularity

mysqldump

ALL

WARM

MEDUIM

SLOWEST

MOST FLEXIBLE

mysqldump

INNODB

HOT

MEDUIM

SLOWEST

MOST FLEXIBLE

select into outfile

ALL

WARM

SLOW

SLOW

MOST FLEXIBLE

mk-parallel-backup

ALL

WARM

MEDUIM

MEDUIM

FLEXIBLE

ibbackup

INNODB

HOT

FAST

FAST

FLEXIBLE

ibbackup

ALL

WARM

FAST

FAST

FLEXIBLE

backup command in mysqld

ALL

HOT

FAST

FAST

FLEXIBLE

filesystem (copy files)

ALL

COLD

FASTEST

FASTEST

NOT FLEXIBLE

snapshot (using LVM, ZFS, VMWare)

ALL

ALMOST HOT

FAST

FAST

LEAST FLEXIBLE

mysqlhotcopy

MyISAM

MOSTLY COLD

FAST

FAST

FLEXIBLE

 

mysqldump命令備份數據庫

mysqldump命令已經存在很長時間了,它提供了對整個數據庫、單個數據庫、單個表甚至數據子集的邏輯備份,使用-where選項,它通常被稱爲數據轉儲。輸出是ascii格式的,這意味着您可以在vi或記事本中打開它,並根據需要更改包含的內容。我不打算詳細介紹mysqldump命令的所有選項,而是向您展示一些示例

mysqldump 備份所有的數據庫

1

2

## backup all databases

mysqldump --user=root --password --all-databases > backup_<date>_all.sql

例如:mysqldump --user=root --password --all-databases > backup_2019.08.25_all.sql

mysqldump 備份特定的數據庫

1

2

## backup a specific database

mysqldump --user=root --password <database_name> > backup_<date>_<database_name>.sql

例如:mysqldump --user=root --password sky8gdatabase > backup_2019.08.25_sky8gdatabase .sql

mysqldump 備份數據庫中一個表數據

1

2

## backup a table from a database

mysqldump --user=root --password <database_name> <table_name> > backup_<date>_<database_name>_<table_name>.sql

例如:mysqldump --user=root --password sky8gdatabase wp-user > backup_2019.08.25_sky8gdatabase_wp-user.sql

mysqldump 備份數據庫中特定的數據

1

2

## backup some specific data

mysqldump --user=root --password <database_name> <table_name> --where "last_name='VALLE' order by first_name" > backup_<date>.sql

例如:mysqldump --user=root --password sky8gdatabase  wp-user --where "last_name='VALLE' order by first_name" > backup_2019.08.25.sql

mysqldump 一個數據庫備份到另一個數據庫

1

2

## dumping from one database to another

mysqldump --databases <database_name> | mysql -h <destination_host> <database_name>

 

mysqldump壓縮與未壓縮備份

備份壓縮可以節省存儲空間和網絡流量,從而將備份數據傳輸到其他服務器上。壓縮確實增加了一些CPU開銷,但開銷是依賴於算法的,並且對於MySQL Enterprise Backup使用的默認算法來說相當低。此外,壓縮通常會大大減少IO開銷,這可能會縮短恢復時間,尤其是對於速度較慢的IO設備。但是,在還原過程中,您需要時間進行解壓縮,同時還需要壓縮和解壓縮數據的存儲空間。因此,在考慮是否創建壓縮備份時,請考慮額外的存儲空間以及還原期間所需的額外時間。

將備份數據流式傳輸到另一臺服務器時,您可能希望在原始服務器或目標服務器上壓縮備份,具體取決於哪個服務器具有更多的備用CPU容量以及壓縮可以節省多少網絡流量。

mysqldump 不使用壓縮備份

 

1

mysqldump -hhostname -uusername -ppassword databasename > backupfile.sql.gz

mysqldump 使用壓縮備份

1

mysqldump -hhostname -uusername -ppassword databasename | gzip > backupfile.sql.gz

 

mysqldump命令導入(恢復)數據庫

mysqldump 恢復所有的數據庫

 

1

2

## all databases

mysql --user=root --password < backup.sql

mysqldump 恢復特定的數據庫

1

2

## specific database

mysql --user=<user> --password <database_name> < backup_<dataabse_name>.sql

 

mysqldump的定時計劃任務

1.創建MySQL備份腳本

現在,將以下內容複製到腳本文件中(例如:/backup/mysql-backup.sh),並保存在Linux系統上。使用此鏈接下載腳本。然後根據您的環境在腳本的“Update below values”部分更改一些配置值。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

#!/bin/bash

 

export PATH=/bin:/usr/bin:/usr/local/bin

TODAY=`date +"%d%b%Y"`

################################################################

################## Update below values  ########################

DB_BACKUP_PATH='/backup/dbbackup'

MYSQL_HOST='localhost'

MYSQL_PORT='3306'

MYSQL_USER='root'

MYSQL_PASSWORD='mysecret'

DATABASE_NAME='mydb'

BACKUP_RETAIN_DAYS=30   ## Number of days to keep local backup copy

#################################################################

mkdir -p ${DB_BACKUP_PATH}/${TODAY}

echo "Backup started for database - ${DATABASE_NAME}"

mysqldump -h ${MYSQL_HOST} \

   -P ${MYSQL_PORT} \

   -u ${MYSQL_USER} \

   -p${MYSQL_PASSWORD} \

   ${DATABASE_NAME} | gzip > ${DB_BACKUP_PATH}/${TODAY}/${DATABASE_NAME}-${TODAY}.sql.gz

if [ $? -eq 0 ]; then

  echo "Database backup successfully completed"

else

  echo "Error found during backup"

  exit 1

fi

##### Remove backups older than {BACKUP_RETAIN_DAYS} days  #####

DBDELDATE=`date +"%d%b%Y" --date="${BACKUP_RETAIN_DAYS} days ago"`

if [ ! -z ${DB_BACKUP_PATH} ]; then

      cd ${DB_BACKUP_PATH}

      if [ ! -z ${DBDELDATE} ] && [ -d ${DBDELDATE} ]; then

            rm -rf ${DBDELDATE}

      fi

fi

### End of script ####

2.創建或下載腳本後,請確保將執行權限設置爲正常運行。

1

chmod +x /backup/mysql-backup.sh

3.在Crontab中調用腳本

現在將crontab中的腳本安排爲每日運行,並定期完成備份。使用crontab -e命令在系統上編輯crontab。添加以下設置以在凌晨2點啓用備份。

1

0 2 * * * root /backup/mysql-backup.sh

保存crontab文件。啓用cron後,腳本將自動進行備份,但要確保每週或每月進行一次檢查備份。

如果有不懂的地方請留言,SKY8G網站編輯者專注於研究IT源代碼研究與開發。希望你下次光臨,你的認可和留言是對我們最大的支持,謝謝!

 本篇文章是由sky8g網站原創文章版權聲明轉載請註明:
來源網址:https://www.sky8g.com/technology/3089/

分類: IT博客MySQL-技術Tagged mysqldump備份數據庫

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章