天天看點

MySQL資料庫的備份與恢複 MySQL資料庫的備份與恢複 mysqldump的關鍵參數說明 生産場景備份

         利用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

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

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)

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              |

| 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

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.

[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

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`;

  `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檔案

root@solin:~# mysqldump -uroot -p -B -d radius >/opt/radius_d.sql.gz

root@solin:~# egrep -v "#|\*|--|^$" /opt/radius_d.sql.gz

USE `radius`;

DROP TABLE IF EXISTS `accounting_authconnectionhistory`;

CREATE TABLE `accounting_authconnectionhistory` (

  `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

root@solin:~# egrep -v "#|\*|--|^$" /opt/radius_t.sql.gz

LOCK TABLES `accounting_authconnectionhistory` WRITE;

UNLOCK TABLES;

LOCK TABLES `accounting_authconnectionuseronlinetimelist` WRITE;

LOCK TABLES `accounting_tempertoryalloweduserlist` WRITE;

LOCK TABLES `accounting_userrecord` WRITE;

LOCK TABLES `adminbd_adpullhistory` WRITE;

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備份演練

<a href="http://s2.51cto.com/wyfs02/M00/8A/EA/wKioL1g_iVSSUySRAAL0PtQOrKc387.png-wh_500x0-wm_3-wmp_4-s_3657232053.png" target="_blank"></a>

本文轉自 運維小當家 51CTO部落格,原文連結:http://blog.51cto.com/solin/1878387,如需轉載請自行聯系原作者