本文轉自網絡優秀的文章
詳細可以參考https://www.cnblogs.com/Cherie/p/3309456.html
https://www.cnblogs.com/roverliang/p/6436140.html
https://www.cnblogs.com/mkfywj/p/5452045.html
https://www.cnblogs.com/waynechou/p/7794939.html
刪除表內容,不刪除表結構
truncate table 表名 --自動增長的列重置為1
delete from 表名 --自動增長的列不重置,繼續延續以前的。
一、SELECT INTO…OUTFILE語法:
select * from Table into outfile '/路徑/文件名'
fields terminated by ','
enclosed by '"'
lines terminated by '\r\n'
(1)路徑目錄必須有讀寫權限777
(2)文件名必須唯一
(3)fields terminated by ','必須存在,否則打開的文件的列在同一的單元格中出現
(4)我驗證的表結構為gbk的,否則出現亂碼
● fields子句:在FIELDS子句中有三個亞子句:TERMINATED BY、 [OPTIONALLY] ENCLOSED BY和ESCAPED BY。如果指定了FIELDS子句,則這三個亞子句中至少要指定一個。
(1)TERMINATED BY用來指定字段值之間的符號,例如,“TERMINATED BY ','”指定了逗號作為兩個字段值之間的標志。
(2)ENCLOSED BY子句用來指定包裹文件中字符值的符號,例如,“ENCLOSED BY ' " '”表示文件中字符值放在雙引號之間,若加上關鍵字OPTIONALLY表示所有的值都放在雙引號之間。
(3)ESCAPED BY子句用來指定轉義字符,例如,“ESCAPED BY '*'”將“*”指定為轉義字符,取代“\”,如空格將表示為“*N”。
● LINES子句:在LINES子句中使用TERMINATED BY指定一行結束的標志,如“LINES TERMINATED BY '?'”表示一行以“?”作為結束標志。
二、LOAD DATA …INFILE語句是SELECT INTO…OUTFILE語句的補語,該語句可以將一個文件中的數據導入到數據庫中。
> delete from e;
> load data infile "/data/mysql/e.sql" into table e fields terminated by ',';
三、mysql導入excel
1、第一步我們得到了一個excel表,里面有很多需要我們導入的數據。
2、刪除第1行"准考證號""XXX"....只保留我們需要的數據部分。
3、單擊"文件"--"另存為",類型選擇為"CSV(逗號分隔)(*.csv)",將excel表另存為csv文檔。中間不管提示什么一律"是"就好了...
4、重點!另存為的slyar.csv是可以用記事本或者Editplus等文本編輯器打開的,我們打開來看一下。
可以看到其實csv文檔就是txt(即你可以使用自己的txt然后換個后綴名就行),只不過把各個字段之間用","分隔開了而已。既然它是txt文檔,那么就涉及到了文件編碼的問題!默認保存的文件編碼是ANSI,如果你的數據庫(數據表)使用UTF-8編碼,那么一定要將這個csv文件另存為UTF-8格式!
5.進入phpMyAdmin創建一個表,新建字段,字段名與你要導入的excel表字段關聯且順序相同。太簡單,不截圖了。
6、在phpMyAdmin中打開你創建的表,在最上面單擊"導入"。
7、"導入文件的格式"選擇第二個"CSV 使用 LOAD DATA"。
8、"要導入的文件"選擇你剛才另存為的csv文件。
9、"字段分隔符"更改為",",就是excel另存為默認選擇的"(逗號分隔)",你可以自由選擇分隔符,通常出現在你的excel表格數據里有","的情況下。
10、"字段名"是個高級應用,這里的字段名是你數據表里的字段名,它表示你要進行填充的字段,多個字段之間用","隔開。這里為空表示全部填充,並且按順序填充,多余的數據不要。
10、檢查沒問題就可以按"執行"了。
11、"導入成功,執行了 1 個查詢"。看到這個就表示成功了,如果導入不成功請從頭到尾再仔細對照本文重做一次,如果還不行請往下看...
12、某些excel導出的數據可能會變得很奇怪,例如中間會有特殊字符神馬神馬的,總之如果這個方法不行的話,你還是可以去用我之前寫的那個軟件..
四、使用mysqldump備份和恢復數據庫
mysqldump也是MySQL轉儲數據庫常用的自帶工具,mysqldump產生副本文件有兩種情形:
1、文件是指定格式的文本文件 2、是可以執行的SQL腳本文件
使用方法有以下3種:
1、備份指定的多個數據庫。
mysqldump -u root -p --databases choose test > roverliang.sql
2、備份所有的數據庫
mysqldump -u root -p --all-databases choose test > roverliang.sql
3、備份指定數據庫中的某些表
mysqldump -u root -p choose test > roverliang.sql
mysqldump 完整的參數是:
mysqldump -u USER_NAME -p PASSWORD [其他選項] DB [其他數據庫庫表]
--default-character-set
: 設置字符集
--single-transaction
: 將導出設置成事務
--no-data
: 導出的SQL腳本中,將只包含創建表的create 語句。
--add-drop-table
:導出的腳本中,包含 drop table if exists
--routines
導出存儲過程及函數
--events
導出事件
--triggers
導出觸發器
導入mysqldump 的數據文件
一句命令就能搞定,在mysql終端下執行: 命令格式: source FILE_PATH source ~/demo.sql
一、備份常用操作基本命令
1、備份命令mysqldump格式
格式:mysqldump -h主機名 -P端口 -u用戶名 -p密碼 –database 數據庫名 > 文件名.sql
2、備份MySQL數據庫為帶刪除表的格式
備份MySQL數據庫為帶刪除表的格式,能夠讓該備份覆蓋已有數據庫而不需要手動刪除原有數據庫。
mysqldump --add-drop-table -uusername -ppassword -database databasename > backupfile.sql
3、直接將MySQL數據庫壓縮備份
mysqldump -hhostname -uusername -ppassword -database databasename | gzip > backupfile.sql.gz
4、備份MySQL數據庫某個(些)表
mysqldump -hhostname -uusername -ppassword databasename specific_table1 specific_table2 > backupfile.sql
5、同時備份多個MySQL數據庫
mysqldump -hhostname -uusername -ppassword –databases databasename1 databasename2 databasename3 > multibackupfile.sql僅僅備6、僅備份份數據庫結構
mysqldump –no-data –databases databasename1 databasename2 databasename3 > structurebackupfile.sql
7、備份服務器上所有數據庫
mysqldump –all-databases > allbackupfile.sql
8、還原MySQL數據庫的命令
mysql -hhostname -uusername -ppassword databasename < backupfile.sql
9、還原壓縮的MySQL數據庫
gunzip < backupfile.sql.gz | mysql -uusername -ppassword databasename
10、將數據庫轉移到新服務器
mysqldump -uusername -ppassword databasename | mysql –host=*.*.*.* -C databasename
11、--master-data 和--single-transaction
在mysqldump中使用--master-data=2,會記錄binlog文件和position的信息 。--single-transaction會將隔離級別設置成repeatable-commited
12、導入數據庫
常用source命令,用use進入到某個數據庫,mysql>source d:\test.sql,后面的參數為腳本文件。
13、查看binlog日志
查看binlog日志可用用命令 mysqlbinlog binlog日志名稱|more
14、general_log
General_log記錄數據庫的任何操作,查看general_log 的狀態和位置可以用命令show variables like "general_log%" ,開啟general_log可以用命令set global general_log=on
二、增量備份
小量的數據庫可以每天進行完整備份,因為這也用不了多少時間,但當數據庫很大時,就不太可能每天進行一次完整備份了,這時候就可以使用增量備份。增量備份的原理就是使用了mysql的binlog志。
1、首先做一次完整備份:
mysqldump -h10.6.208.183 -utest2 -p123 -P3310 --single-transaction --master-data=2 test>test.sql這時候就會得到一個全備文件test.sql
在sql文件中我們會看到:
-- CHANGE MASTER TO MASTER_LOG_FILE='bin-log.000002', MASTER_LOG_POS=107;是指備份后所有的更改將會保存到bin-log.000002二進制文件中。
2、在test庫的t_student表中增加兩條記錄,然后執行flush logs命令。這時將會產生一個新的二進制日志文件bin-log.000003,bin-log.000002則保存了全備過后的所有更改,既增加記錄的操作也保存在了bin-log.00002中。
3、再在test庫中的a表中增加兩條記錄,然后誤刪除t_student表和a表。a中增加記錄的操作和刪除表a和t_student的操作都記錄在bin-log.000003中。
三、恢復
1、首先導入全備數據
mysql -h10.6.208.183 -utest2 -p123 -P3310 < test.sql,也可以直接在mysql命令行下面用source導入
2、恢復bin-log.000002
mysqlbinlog bin-log.000002 |mysql -h10.6.208.183 -utest2 -p123 -P3310
3、恢復部分 bin-log.000003
在general_log中找到誤刪除的時間點,然后更加對應的時間點到bin-log.000003中找到相應的position點,需要恢復到誤刪除的前面一個position點。
可以用如下參數來控制binlog的區間
--start-position 開始點 --stop-position 結束點
--start-date 開始時間 --stop-date 結束時間
找到恢復點后,既可以開始恢復。
mysqlbinlog mysql-bin.000003 --stop-position=208 |mysql -h10.6.208.183 -utest2 -p123 -P3310