mysql需要备份的数据_Mysql根据需要备份数据
因為數據的重要性,所以要定時的備份數據,當災難來臨時有一手,確保數據不丟失。這就是DBA的職責,保證數據的安全和持續服務。
備份單個數據庫多種參數使用
mysql數據庫自帶了一個很好的備份命令,就是Mysqldump,它的基本使用如下:
語法:mysqldump -u 用戶名 -p 數據庫名 >備份的文件名
備份單個表
語法:mysqldump -u用戶名 -p密碼 數據庫名 表名>備份的文件名
[root@server ~]# mysqldump -uroot -p123456 www pet >/tmp/pet.sql
提示:此時www為庫名,后面就是pet表了。
DROP TABLE IF EXISTS `pet`;
CREATE TABLE `pet` (
`name` varchar(20) NOT NULL,
`owner` varchar(20) DEFAULT NULL,
`species` varchar(20) DEFAULT NULL,
`sex` char(1) DEFAULT NULL,
`birth` date DEFAULT NULL,
`death` date DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
LOCK TABLES `pet` WRITE;
INSERT INTO `pet` VALUES ('Puffball','Diane','hamster','f','1999-03-30',NULL),('Fluffy','Harold','cat','f','1993-02-04',NULL),('Claws','Gwen','cat','m','1994-03-17',NULL),('Buffy','Harold','dog','f','1989-05-13',NULL),('Fang','Benny','dog','m','1990-08-27',NULL),('Bowser','Diane','dog','m','1979-08-31','0000-00-00'),('Chirpy','Gwen','bird','f','1998-09-11',NULL),('Whistler','Gwen','bird','','1997-12-09',NULL),('Slim','Benny','snake','m','1996-04-29',NULL);
備份多個表
[root@server ~]# mysqldump -uroot -p123456 www pet student >/tmp/pet_student.sql
但是這樣備份是把兩個表的數據也備份在一個文件里了,在企業中一個庫有大表小表的,有時候可能是小表出了問題。只需要恢復一個小表,上面的多表備份就很難拆開了。所要就要用到分庫分表備份。
mysqldump -uroot -p123456 www pet >/tmp/pet.sql
mysqldump -uroot -p123456 www student >/tmp/student.sql
或者利用For循環實現簡單分庫備份。
[root@server ~]# vi fenku_bak_mysql.sh
for dbname in `mysql -uroot -p123456 -e "show databases;"|egrep -v"database|infor|per
for|perfor|test|mysql"`
do
mysqldump -uroot -p123456 --events -B $dbname|gzip >/tmp/bak/${dbname}_bak.sql.gz
done
備份表結構 -d
[root@server ~]# mysqldump -uroot -p123456 -d www pet student >/tmp/table.sql
[root@server ~]# egrep -v "#|\*|--|^$" /tmp/table.sql
DROP TABLE IF EXISTS `pet`;
CREATE TABLE `pet` (
`name` varchar(20) NOT NULL,
`owner` varchar(20) DEFAULT NULL,
`species` varchar(20) DEFAULT NULL,
`sex` char(1) DEFAULT NULL,
`birth` date DEFAULT NULL,
`death` date DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`id` int(11) NOT NULL,
`name` varchar(20) NOT NULL,
`sex` char(1) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
4、只備份表數據:-t —no-create-info Don’t write table creation info
[root@server ~]# mysqldump -uroot -p123456 -t www pet student >/tmp/data.sql
[root@server ~]# egrep -v "#|\*|--|^$" /tmp/data.sql
LOCK TABLES `pet` WRITE;
INSERT INTO `pet` VALUES ('Puffball','Diane','hamster','f','1999-03-30',NULL),('Fluffy','Harold','cat','f','1993-02-04',NULL),('Claws','Gwen','cat','m','1994-03-17',NULL),('Buffy','Harold','dog','f','1989-05-13',NULL),('Fang','Benny','dog','m','1990-08-27',NULL),('Bowser','Diane','dog','m','1979-08-31','0000-00-00'),('Chirpy','Gwen','bird','f','1998-09-11',NULL),('Whistler','Gwen','bird','','1997-12-09',NULL),('Slim','Benny','snake','m','1996-04-29',NULL);
UNLOCK TABLES;
LOCK TABLES `student` WRITE;
UNLOCK TABLES;
備份Mysql里所有數據(包括庫和表)
mysqldump -uroot -p123456 -A -B --events |gzip >/tmp/a.sql.gz
-F:刷新binlog參數;
[root@server tmp]# ls /data/mysql/
bbs ib_logfile0 mysql mysql-bin.index server.pid www
ibdata1 ib_logfile1 mysql-bin.000001 server.err test
[root@server tmp]# mysqldump -uroot -p123456 -A -B -F --events |gzip >/tmp/b.sql.gz
[root@server tmp]# ls /data/mysql/
bbs ib_logfile1 mysql-bin.000002 mysql-bin.000005 server.pid
ibdata1 mysql mysql-bin.000003 mysql-bin.index test
ib_logfile0 mysql-bin.000001 mysql-bin.000004 server.err www
--master-data=1 :此參數會自動定位到binlog文件和位置點
[root@server tmp]# mysqldump -uroot -p123456 --master-data=1 www
-- MySQL dump 10.13 Distrib 5.1.73, for unknown-linux-gnu (x86_64)
--
-- Host: localhost Database: www
-- ------------------------------------------------------
-- Server version 5.1.73-log
/*!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 utf8 */;
/*!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 */;
--
-- Position to start replication or point-in-time recovery from
--
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000005', MASTER_LOG_POS=106;
mysqldump的關鍵參數說明:
—help
-B指定多個庫,備份出來的文件會有建庫語句和use語句。
—compact 去掉注釋,適合調試輸出,一般生產環境不用
-A所有庫
-F刷新binlog日志
—master-data 增加binlog日志文件名及對應的位置點。
-x ,—lock-all-tables 鎖表 所有人都不能對表操作了。
-l,—lock-tables 只讀鎖表 不能寫只可讀
-d只備份表結構
-t只備份數據
—single-transaction 適合innodb事務數據備份
Innodb表在備份時,通常啟動選項—single-transaction來保證備份的一致性,實際上它的工作原理是設定本次會話的隔離級別為:REPEATABLE READ,以確保本次會話(dump)時,不會看到其它會話已經提交了的數據。
Myisam:常規備份命令
mysqldump -uroot -p123456 -A -B -F --master-data=2 -x|gzip>/tmp/all.sql.gz
Innodb:常規備份命令(工作中推薦使用的引擎)
mysqldump -uroot -p123456 -A -B -F --master-data=2 --single-transaction|gzip>/tmp/all.sql.gz
master-data作用:
—master-data=2 結果:
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000010', MASTER_LOG_POS=106;
—master-data=1 結果:
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000010', MASTER_LOG_POS=106;
`
區別在于前面的:“—” ,此符號在mysqlbinlog日志是注釋作用,意思說=2是只給出位置點而已,=1時等命令,是可執行的,特別在主從同步的時間要用到。
總結
以上是生活随笔為你收集整理的mysql需要备份的数据_Mysql根据需要备份数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 天子多少钱一包啊?
- 下一篇: mysql copy pending_m