您好,登錄后才能下訂單哦!
本篇文章給大家主要講的是關于MySQL數據庫如何實現備份與恢復方法的內容,感興趣的話就一起來看看這篇文章吧,相信看完MySQL數據庫如何實現備份與恢復方法對大家多少有點參考價值吧。
利用mysqldump命令備份數據的過程,實際上就是把數據從mysql庫里一邏輯的sql語句的形式直接輸出或生成備份的文件的過程。
mysql數據庫自帶了一個很好用的備份命令,就是mysqldump基本使用如下
語法:mysqldump -u 用戶名 -p 數據庫名 > 備份的文件名
1、備份數據并恢復:
mysqldump -uroot -p radius > /opt/mysql_bak.sql
還原數據庫
mysql -uroot -p radius </opt/mysql_bak.sql
2、指定拉丁字符集備份數據庫
mysqldump -uroot -p --default-character-set=latin1 radius > /opt/mysql_bak.sql
還原數據庫
mysql -uroot -p radius </opt/mysql_bak.sql
3、備份時加參數(-B) #會在備份時增加創建數據庫的連接數據的語句
mysqldump -uroot -p -B radius > /opt/mysql_bak_B.sql
還原數據庫
mysql -uroot -p </opt/mysql_bak_B.sq
4、壓縮備份(用gzip對備份的數據壓縮)
mysqldump -uroot -p -B radius|gzip >/opt/mysq_bak.sql.gz
5、查看備份內容
egrep -v "#|\*|--|^$" /opt/mysql_bak.sql
root@solin:~# mysql -uroot -p -e "select id,username,is_superuser,last_login from radius.auth_user;"
Enter password:
+----+----------+--------------+---------------------+
| id | username | is_superuser | last_login |
+----+----------+--------------+---------------------+
| 1 | root | 1 | 2016-11-25 03:26:43 |
| 2 | WeiFei | 0 | NULL |
+----+----------+--------------+---------------------+
1、同時備份mysql和radius庫
mysqldump -uroot -p -B radius mysql|gzip >/opt/mul.bak.sql.gz
提示:-B
表示連接多個庫,并增加use db和create database db的命令信息
2、備份所有的庫(-A備份所有的庫)
mysqldump -uroot -p -A -B |gzip >/opt/a.sql.gz
3、利用source命令恢復數據庫
進入數據庫控制臺,mysql -uroot -p登陸后
msyql>use 數據庫
然后使用source命令,后面參數為數據文件
例:root@solin:/opt# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 251
Server version: 5.6.28-0solin0.15.04.1 (Solin)
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
+--------------------+
1 row in set (0.00 sec)
mysql> system ls /opt
a.sql mysql.sql.gz radius_t.sql.gz shop.sql
bak radius.sql shop_shop.sql
mysql> source a.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)
…
…
…
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
mysql> show database;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'database' at line 1
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| radius |
+--------------------+
3 rows in set (0.00 sec)
mysql> \q
Bye
企業的數據庫會有很多庫,出問題可能是某一個庫,如果在備份時把所有的庫備份成一個數據文件的,恢復某一個庫時會較麻煩,這是就用到了分庫備份。
1、命令行分庫備份
root@solin:~# mysql -uroot -p -e "show databases;"|grep -Evi "database|infor|perfor"|sed -r 's#^([a-z].*$)#mysqldump -uroot -p -B \1|gzip >/opt/bak/\1.sql.gz#g'|bash
Enter password:
root@solin:~# ls /opt/bak/
mysql.sql.gz radius.sql.gz
2、for循環實現分庫備份
[root@solin scripts]# cat fenku.sh
#!/bin/sh
for dbname in `mysql -uroot -p'centos' -e "show databases;"|grep -Evi "database|info|perfor"`
do
mysqldump -uroot -p'centos' --events -B $dbname|gzip >/opt/bak/${dbname}_bak.sql.gz
done
[root@solin scripts]# sh fenku.sh
[root@solin scripts]# ls /opt/bak/
mysql_bak.sql.gz solin_gbk_bak.sql.gz solin_utf8_bak.sql.gz test_bak.sql.gz
分庫備份還原
[root@solin ~]# gzip -d /opt/bak/*
[root@solin ~]# cd /opt/bak/
[root@solin bak]# ls *.sql|sed 's#_bak.sql##g'
mysql
radius
[root@solin bak]# for dbname in `ls *.sql|sed 's#_bak.sql##g'`;do mysql -uroot -pbdyun < ${dbname}_bak.sql;done
Warning: Using a password on the command line interface can be insecure.
Warning: Using a password on the command line interface can be insecure.
[root@solin bak]#
1、備份單個表
語法:mysqldump -u用戶名 -p 數據庫名 表名>備份的文件名
例: mysqldump -u root -p radius shop_shop >/opt/shop_shop.sql
查看結果
root@solin:~# ls /opt/
bak mysql.sql.gz radius.sql.gz shop_shop.sql
root@solin:~# egrep -v "#|\*|--|^$" /opt/shop_shop.sql
DROP TABLE IF EXISTS `shop_shop`;
CREATE TABLE `shop_shop` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`shopname` varchar(200) COLLATE utf8_unicode_ci NOT NULL,
`contract_person_qq_number` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`agent` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`url` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
……
2、備份多個表
語法:mysqldump -u用戶名 -p 數據庫名 表名1 表名2 >備份的文件名
例: root@solin:~# mysqldump -uroot -p radius shop_shop shop_shop_admins >/opt/shop.sql
Enter password:
root@solin:~# ls /opt/
bak mysql.sql.gz radius.sql.gz shop_shop.sql shop.sql
root@solin:~# egrep -v "#|\*|--|^$" /opt/shop.sql DROP TABLE IF EXISTS `shop_shop`;
CREATE TABLE `shop_shop` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`shopname` varchar(200) COLLATE utf8_unicode_ci NOT NULL,
`contract_person_qq_number` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`agent` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`url` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`address` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
……
3、分庫分表備份
mysqdump -uroot -p radius test >radius_test.sql
mysqdump -uroot -p radius test1 >radius_test2.sql
……
注:將上述命令放入一個腳本里就是腳本分表備份了,當然你也可以搜索其他更好的備份腳本,恢復時批量恢復多個SQl文件
1、mysqldump -d參數只備份表的結構
root@solin:~# mysqldump -uroot -p -B -d radius >/opt/radius_d.sql.gz
Enter password:
root@solin:~# egrep -v "#|\*|--|^$" /opt/radius_d.sql.gz
USE `radius`;
DROP TABLE IF EXISTS `accounting_authconnectionhistory`;
CREATE TABLE `accounting_authconnectionhistory` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`wlanuserip` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`wlanacname` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`wlanacip` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`ssid` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
……
2、mysqldump -t參數只備份表的數據
例:root@solin:~# mysqldump -uroot -p -B -t radius >/opt/radius_t.sql.gz
Enter password:
root@solin:~# egrep -v "#|\*|--|^$" /opt/radius_t.sql.gz
USE `radius`;
LOCK TABLES `accounting_authconnectionhistory` WRITE;
UNLOCK TABLES;
LOCK TABLES `accounting_authconnectionuseronlinetimelist` WRITE;
UNLOCK TABLES;
LOCK TABLES `accounting_tempertoryalloweduserlist` WRITE;
UNLOCK TABLES;
LOCK TABLES `accounting_userrecord` WRITE;
UNLOCK TABLES;
LOCK TABLES `adminbd_adpullhistory` WRITE;
UNLOCK TABLES;
……
1、mysqldump -F參數刷新、切割binlog
2、mysqldump --master-data=1參數 找到binlog的文件和位置
1、-A備份所有庫
2、-B指定多個庫,增加建表語句和use語句
3、-F刷新binlog日志
4、-d只備份表結構
5、-t只備份表數據
6、-x提交請求鎖定所有數據庫中的所有表,以保證數據的一致性。這是一個全局讀鎖,并且自動關閉--single-transaction 和--lock-tables 選項。
7、-l --lock-tables 鎖所有的表為只讀
8、--master-data增加binlog日志文件名及對應的位置點
9、--compact去掉注釋,適合調試輸出(生產環境不用)
10、--singe-transaction 適合innodb事物數據庫備份
1、常規備份
myisam備份:
mysqldump -uroot -p -A -B --master-data=2 -x |gzip >/opt/all.sql.gz
innodb備份:
mysqldump -uroot -p -A -B --master-data=2 --singe-transaction|gzip >/opt/all.sql.gz
2、專業DBA mysqldump備份演練
以上關于MySQL數據庫如何實現備份與恢復方法詳細內容,對大家有幫助嗎?如果想要了解更多相關,可以繼續關注我們的行業資訊板塊。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。