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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql数据库备份 dump_MySQL数据库备份之mysqldump

發(fā)布時(shí)間:2023/12/15 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql数据库备份 dump_MySQL数据库备份之mysqldump 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

創(chuàng)建用戶備份的用戶

MariaDB [mysql]> create user 'backdata'@'localhost' identified by 'test@123456';

Query OK, 0 rows affected (0.00 sec)

MariaDB [mysql]> grant select,lock tables,replication client,reload,show view,event,trigger on *.* to 'backdata'@'localhost';

Query OK, 0 rows affected (0.00 sec)

在本地電腦上,找一塊大的硬盤,然后創(chuàng)建一個(gè)目錄,專門存放備份

[root@blog ~]# mkdir /opt/mysql_backup

mysqldump參數(shù)詳解

-u 指定用戶

-p 密碼

-P 端口

-S socket文件

-h 主機(jī)

--master-data=2表示在dump過程中記錄主庫的binlog和pos點(diǎn),并在dump文件中注釋掉這一行;

-A 備份所有的數(shù)據(jù)庫

-B 數(shù)據(jù)庫? 指定要備份的數(shù)據(jù)庫

-d 不備份數(shù)據(jù),只備份表結(jié)構(gòu)

-e event? 事件

-R 存儲過程

--triggers 觸發(fā)器

--single-transaction

--lock-all-tables

注意:在從庫上執(zhí)行備份時(shí),即--dump-slave=2,這時(shí)整個(gè)dump過程都是stop io_thread的狀態(tài)

理解--single-transaction

thread_id: 35

argument: FLUSH TABLES WITH READ LOCK

說明:因?yàn)殚_啟了--master-data=2,這時(shí)就需要flush tables with read lock鎖住全庫,記錄當(dāng)時(shí)的master_log_file和master_log_pos

thread_id: 35

argument: SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ

說明:--single-transaction參數(shù)的作用,設(shè)置事務(wù)的隔離級別為可重復(fù)讀,即REPEATABLE

READ,這樣能保證在一個(gè)事務(wù)中所有相同的查詢讀取到同樣的數(shù)據(jù),也就大概保證了在dump期間,如果其他innodb引擎的線程修改了表的數(shù)據(jù)并提交,對該dump線程的數(shù)據(jù)并無影響

thread_id: 35

argument: START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */

這時(shí)開啟一個(gè)事務(wù),并且設(shè)置WITH CONSISTENT

SNAPSHOT為快照級別,如果只是可重復(fù)讀,那么在事務(wù)開始時(shí)還沒dump數(shù)據(jù)時(shí),這時(shí)其他線程修改并提交了數(shù)據(jù),那么這時(shí)第一次查詢得到的結(jié)果是其他線程提交后的結(jié)果,而WITH

CONSISTENT

SNAPSHOT能夠保證在事務(wù)開啟的時(shí)候,第一次查詢的結(jié)果就是事務(wù)開始時(shí)的數(shù)據(jù)A,即使這時(shí)其他線程將其數(shù)據(jù)修改為B,查的結(jié)果依然是A

理解--lock-all-tables

thread_id: 120

argument: FLUSH TABLES WITH READ LOCK

這里flush tables with read lock之后就不會主動unlock tables,保證整個(gè)dump過程整個(gè)db數(shù)據(jù)不可更改,也沒有事務(wù)的概念了

一)備份和恢復(fù)所有庫

[root@blog ~]# mysqldump -S /tmp/mysql.sock -u backdata -p -A >/opt/mysql_backup/alldata_$(date +%F_%H).sql

[root@blog ~]# cat /opt/mysql_backup/alldata_2018-04-27_11.sql---查看是否存在

如下

(插入完畢后,然后執(zhí)行UNLOCK tables)

模擬恢復(fù)數(shù)據(jù)

mysql> drop database louisblog;

Query OK, 12 rows affected (0.09 sec)

[root@blog ~]# mysql -u root -p < /opt/mysql_backup/alldata_2018-04-27_11.sql

Enter password:

(由于備份數(shù)據(jù)的用戶,沒有權(quán)限create table和create database,已經(jīng)insert權(quán)限,這邊需要root用戶來操作)

二)備份單個(gè)庫

[root@blog ~]# mysqldump -S /tmp/mysql.sock -u backdata -p -B louisblog > /opt/mysql_backup/louisblog_$(date +%F_%H).sql

Enter password:

[root@blog ~]# mysqldump -S /tmp/mysql.sock -u backdata -p -B mysql > /opt/mysql_backup/mysql_$(date +%F_%H).sql

Enter password:

[root@blog ~]# cd /opt/mysql_backup/

[root@blog mysql_backup]# ll

total 4900

-rw-r--r-- 1 root root 1669688 Apr 27 11:41 alldata_2018-04-27_11.sql

-rw-r--r-- 1 root root 1669688 Apr 27 12:01 alldata_2018-04-27_12.sql

-rw-r--r-- 1 root root 994517 Apr 27 13:19 louisblog_2018-04-27_13.sql

-rw-r--r-- 1 root root 676300 Apr 27 13:20 mysql_2018-04-27_13.sql

還原數(shù)據(jù)庫

mysql> source /opt/mysql_backup/louisblog_2018-04-27_13.sql

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

三) 分庫備份腳本

#!/bin/bash

#定義變量

USER="backup"

PASS="Aa123321"

HOST="localhost"

DATE="$(date +%F_%H)"

MYCMD="/usr/local/mysql/bin/mysql -u$USER -p$PASS"

BACKUPDIR="/opt/backup/database/"

MYDUMP="/usr/local/mysql/bin/mysqldump -u$USER -p$PASS? -B? -R -E --triggers? --single-transaction --master-data=2"

DBLIST=`$MYCMD -e "show databases;"|sed 1d|egrep -v "_schema|test"`

#判斷備份目錄是否存在

[ ! -d ${BACKUPDIR}/${DATE} ] && mkdir -p ${BACKUPDIR}/${DATE}

#刷新生成二進(jìn)制日志

$MYCMD -e "flush logs;"

#循環(huán)備份數(shù)據(jù)庫

for dbname in $DBLIST;do

$MYDUMP $dbname|gzip >${BACKUPDIR}/${DATE}/${dbname}.sql.gz

done

#刪除7天前的文件

cd $BACKUPDIR && find . -type d -mtime +7 |xargs rm -f

四)分庫分表備份

#!/bin/bash

#description: Use mysqldump to backup mysql.

# GRANT SELECT, RELOAD, SUPER, LOCK TABLES, REPLICATION CLIENT, SHOW VIEW, EVENT, TRIGGER ON *.* TO 'backup'@'localhost'

#編寫my.cnf文件,添加

#[client]

#user = backup

#password = Aa123321

#定義變量

HOST="localhost"

DATE="$(date +%F_%H)"

MYCMD="/usr/local/mysql/bin/mysql --defaults-extra-file=/etc/my.cnf"

BACKUPDIR="/opt/backup/database"

MYDUMP="/usr/local/mysql/bin/mysqldump --defaults-extra-file=/etc/my.cnf -R -E --triggers -x --master-data=2"

DBLIST=`$MYCMD -e "show databases;"|sed 1d|egrep -v "_schema|test"`

#判斷備份目錄是否存在

[ ! -d ${BACKUPDIR}/${DATE} ] && mkdir -p ${BACKUPDIR}/${DATE}

#刷新生成二進(jìn)制日志

$MYCMD -e "flush logs;"

#循環(huán)備份數(shù)據(jù)庫

for dbname in $DBLIST;do

TLIST=`$MYCMD -e "show tables from $dbname;"|sed 1d`

for tname in $TLIST;do

mkdir -p $BACKUPDIR/${DATE}/$dbname

$MYDUMP $dbname $tname|gzip >${BACKUPDIR}/${DATE}/${dbname}/${dbname}_${tname}_${DATE}.sql.gz

done

done

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的mysql数据库备份 dump_MySQL数据库备份之mysqldump的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。