mysql版本
[root@zxl-nginx~]#mysql-V mysqlVer14.14Distrib5.6.28,forlinux-glibc2.5(x86_64)usingEditLinewrapper
一、mysqldump
mysqldump僅適用於數據集較小場景
用法:mysqldump[options][db_name[tbl_name...]] 主要選項解釋: --all-databases,-A:備份所有數據庫 --databases,-B:要備份的數據庫,可以同時備份多個,使用空格分隔 --flush-logs,-F:備份前、請求到鎖之後滾動日志,要記錄下復制時的二進制日志 --flush-privileges:通知數據庫重讀授權表 --host=host_name,-hhost_name:要備份的數據庫的主機名,可以基於網絡備份 --lock-all-tables,-x:請求鎖定所有表之後再備份,對MyISAM,InnoDB,Aria做溫備 --single-transaction:能夠對InnoDB存儲引擎實現熱備 -uusename備份的用戶名 -ppassword登陸數據庫的密碼 --events:備份事件調度器代碼 --routines:備份存儲過程和存儲函數 --triggers:備份觸發器 --master-date={0|1|2},0表示不記錄,1表示距離為changemaster語句,2表示記錄為注釋的changemaster語句
二、創建數據庫以及表並插入數據
mysql>createdatabasezxl; QueryOK,1rowaffected(0.00sec) mysql>usezxl Databasechanged mysql>CREATETABLE`users`( ->`id`bigint(20)NOTNULLAUTO_INCREMENT, ->`name`varchar(255)DEFAULTNULL, ->PRIMARYKEY(`id`) ->)ENGINE=InnoDBAUTO_INCREMENT=7DEFAULTCHARSET=utf8; QueryOK,0rowsaffected(0.02sec)
#這是創建表以及插入數據的示例,來自互聯網。。。
#------------------------------ #--Tablestructureforusers #------------------------------ #DROPTABLEIFEXISTS`users`; #CREATETABLE`users`( #`id`bigint(20)NOTNULLAUTO_INCREMENT, #`name`varchar(255)DEFAULTNULL, #PRIMARYKEY(`id`) #)ENGINE=InnoDBAUTO_INCREMENT=7DEFAULTCHARSET=utf8; # #------------------------------ #--Recordsofusers #------------------------------ #INSERTINTO`users`VALUES('1','小明'); #INSERTINTO`users`VALUES('2','小虎'); #INSERTINTO`users`VALUES('3','小花'); #INSERTINTO`users`VALUES('4','小花'); #INSERTINTO`users`VALUES('5','小花'); #INSERTINTO`users`VALUES('6','小虎');
插入數據
mysql>INSERTINTO`users`VALUES('1','小明'); QueryOK,1rowaffected(0.00sec) mysql>INSERTINTO`users`VALUES('2','小虎'); QueryOK,1rowaffected(0.00sec) mysql>INSERTINTO`users`VALUES('3','小花'); QueryOK,1rowaffected(0.00sec) mysql>INSERTINTO`users`VALUES('4','小花'); QueryOK,1rowaffected(0.00sec) mysql>INSERTINTO`users`VALUES('5','小花'); QueryOK,1rowaffected(0.01sec) mysql>INSERTINTO`users`VALUES('6','小虎'); QueryOK,1rowaffected(0.00sec)
查看插入的數據
mysql>select*fromusers; +----+--------+ |id|name| +----+--------+ |1|小明| |2|小虎| |3|小花| |4|小花| |5|小花| |6|小虎| +----+--------+ 6rowsinset(0.00sec)
三、備份數據庫以及演示如何恢復
[root@zxl-nginx~]#mysqldump-uroot-p123456--databaseszxl--single-transaction--flush-logs--master-data=2>/tmp/zxl_users.sql
Warning: Using a password on the command line interface can be insecure.
注:提示warning,因為5.6版本增加安全機制,不允許在命令行中出現密碼,具體沒研究,可以在my.cnf文件中加入[mysqldump]下加入用戶以及密碼就不會提示warning了。
備份數據庫之後,再次插入新的數據。
mysql>INSERTINTO`users`VALUES('7','bob'); QueryOK,1rowaffected(0.01sec) mysql>INSERTINTO`users`VALUES('8','tom'); QueryOK,1rowaffected(0.00sec) mysql>INSERTINTO`users`VALUES('9','lili'); QueryOK,1rowaffected(0.00sec)
查看新插入的數據
mysql>select*fromusers; +----+--------+ |id|name| +----+--------+ |1|小明| |2|小虎| |3|小花| |4|小花| |5|小花| |6|小虎| |7|bob| |8|tom| |9|lili| +----+--------+ 9rowsinset(0.00sec)
刪除數據庫zxl
mysql>dropdatabasezxl; QueryOK,1rowaffected(0.01sec) mysql>showdatabases; +--------------------+ |Database| +--------------------+ |information_schema| |mysql| |performance_schema| |test| +--------------------+ 4rowsinset(0.00sec)
查看mysqldump備份的sql文件中的pos節點位置以及相應的二進制文件名
二進制文件以及pos節點如下:
-- CHANGE MASTER TO MASTER_LOG_FILE='master-bin.000060', MASTER_LOG_POS=120;
使用mysqlbiglog查看二進制文件,刪除數據庫zxl的at位置是778
[root@zxl-nginxdata]#mysqlbinlogmaster-bin.000060 #at778 #16012014:25:42serverid1end_log_pos867CRC320x014503a4Querythread_id=44exec_time=0error_code=0 SETTIMESTAMP=1453271142/*!*/; dropdatabasezxl
備份二進制日志位置
[root@zxl-nginx~]#mysqlbinlog--start-position=120--stop-position=778/usr/local/mysql/data/master-bin.000060>/tmp/big_log.sql
恢復數據庫
[root@zxl-nginx~]#mysql-uroot-p
查看恢復的數據庫
關閉二進制日志
mysql>setsessionsql_log_bin=0; QueryOK,0rowsaffected(0.00sec) mysql>showdatabases; +--------------------+ |Database| +--------------------+ |information_schema| |mysql| |performance_schema| |test| |zxl| +--------------------+ 5rowsinset(0.00sec)
查看恢復的表 mysql>usezxl; Readingtableinformationforcompletionoftableandcolumnnames Youcanturnoffthisfeaturetogetaquickerstartupwith-A Databasechanged mysql>showtables; +---------------+ |Tables_in_zxl| +---------------+ |users| +---------------+ 1rowinset(0.00sec) mysql>select*fromusers; +----+--------+ |id|name| +----+--------+ |1|小明| |2|小虎| |3|小花| |4|小花| |5|小花| |6|小虎| +----+--------+ 6rowsinset(0.00sec) 注:後增加的數據沒有恢復過來
恢復二進制備份的big-log文件
[root@zxl-nginx~]#mysql-uroot-p
再次查看users表
mysql>select*fromusers; +----+--------+ |id|name| +----+--------+ |1|小明| |2|小虎| |3|小花| |4|小花| |5|小花| |6|小虎| |7|bob| |8|tom| |9|lili| +----+--------+ 9rowsinset(0.00sec)
開啟big-log
mysql>setsessionsql_log_bin=1; QueryOK,0rowsaffected(0.00sec)
注:關閉不關閉二進制只有不進行任何操作即可不關閉,原因你懂的。
注:在實際恢復時最好編輯my.cnf配置文件,添加如下項:
skip-networking //跳過網絡功能來恢復數據