MySQL導入、導出、數據庫定時備份


  本篇介紹MySQL的兩種導出、四種導入。導出一種是mysqldump,一種是select ...info outfile高效導出,下面簡稱select導出;導入分別是source、>、load、mysqlimport。其中只有mysqldump能導出sql語句,只有source、>能導入sql。使用的MySQL版本是8.0.22,注意不同版本之間可能會有差異。

  一、mysqldump導出操作

  1)導出151機器上的數據庫mydb1

/usr/bin/mysqldump -h192.168.43.151 -port3306 -uroot -p123456 mydb1 > /aa.sql

  2)導出所有數據庫

/usr/bin/mysqldump -uroot -p123456 --all-databases  > /aa.sql

  3)導出數據庫mydb1

/usr/bin/mysqldump -uroot -p123456 mydb1 > /aa.sql

  4)導出數據庫mydb1、mydb2

/usr/bin/mysqldump -uroot -p123456 --databases mydb1 mydb2 > /aa.sql

  5)導出數據庫mydb1的表t_test1

/usr/bin/mysqldump -uroot -p123456 mydb1 t_test1 > /aa.sql

  6)導出數據庫mydb1的表t_test1和t_test2

/usr/bin/mysqldump -uroot -p123456 mydb1 t_test1 t_test2> /aa.sql

  7)導出數據庫mydb1的book表的建表語句

/usr/bin/mysqldump -uroot -p123456 -d sltest book > book.sql

  8)導出數據庫mydb1的book表的插入語句

/usr/bin/mysqldump -uroot -p123456 -t sltest book > book.sql

  9)導出數據庫sltest的book表的建表語句和數據文件(生成book.sql和book.txt)

  注意:關閉selinx,否則報沒有權限,book.txt中是數據,字段數據以tab鍵分隔

/usr/bin/mysqldump -uroot -p123456 -T /usr/local/myroom/tmp/ sltest book

  10)導出數據庫sltest的book表,字段以|!?|分隔,行默認以回車(\n)分隔

/usr/bin/mysqldump -uroot -p123456 sltest book -t -T /usr/local/myroom/tmp/ --fields-terminated-by='|!?|'

  11)導出數據庫sltest的book表,字段以|!?|分隔,行以@#$分隔

/usr/bin/mysqldump -uroot -p123456 sltest book -t -T /usr/local/myroom/tmp/ --fields-terminated-by='|!?|' --lines-terminated-by='@#$'

  二、SELECT導出操作

  注意:如果報The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
  解決:https://blog.csdn.net/weixin_44595372/article/details/88723191

  1)導出book表,字段以|!?|分隔,行默認以回車(\n)分隔

select * from book into outfile '/usr/local/myroom/tmp/book.dat' fields terminated by '|!?|';

  2)導出book表,字段以|!?|分隔,行以回車分隔(同上)

select * from book into outfile '/usr/local/myroom/tmp/book.dat' fields terminated by '|!?|' lines terminated by '\n';

  3)導出book表,字段以|!?|分隔,行以$#$分隔

select * from book into outfile '/usr/local/myroom/tmp/book.dat' fields terminated by '|!?|' lines terminated by '$#$';

  三、SOURCE導入操作 

  1)如果待導入文件中沒有指定數據庫,需要use指定數據庫,否則導入當前use的庫中

mysql> use sltest;
mysql> source /aa.sql;

  2)如果不存在待導入的數據庫,文件中也沒有創建語句,需要手動創建,再導入

mysql> create database mydb1;
mysql> use mydb1;
mysql> set names utf8;
mysql> source /aa.sql;

  3)如果待導入文件中有創建庫語句,自動創建數據庫后即指定該庫,直接導入

mysql> source /aa.sql;

  四、< 導入操作

  1)如果待導入文件中沒有創建庫語句,導入命令中指定庫

[root@localhost /]# mysql -uroot -p123456 mydb1 < /aa.sql

  2)如果待導入文件中有創建庫語句,自動創建數據庫后即指定該庫,直接導入

[root@localhost /]# mysql -uroot -p123456 < /aa.sql

  五、LOAD導入操作

  1)不指定行分隔符(或默認\n),下面任意兩句的導出匹配任意兩句的導入

mysql> select * from book into outfile '/usr/local/myroom/tmp/book.dat' fields terminated by '|!?|';
mysql> select * from book into outfile '/usr/local/myroom/tmp/book.dat' fields terminated by '|!?|' lines terminated by '\n';
mysql> load data infile "/usr/local/myroom/tmp/book.dat" into table book fields terminated by "|!?|";
mysql> load data infile "/usr/local/myroom/tmp/book.dat" into table book fields terminated by "|!?|" lines terminated by '\n';

  2)指定行分隔符

mysql> select * from book into outfile '/usr/local/myroom/tmp/book.dat' fields terminated by '|!?|' lines terminated by '$#$';
mysql> load data infile "/usr/local/myroom/tmp/book.dat" into table book fields terminated by "|!?|" lines terminated by '$#$';

  3)導入使用mysqldump導出的數據文件(只與文件格式有關)

/usr/bin/mysqldump -uroot -p123456 sltest book -t -T /usr/local/myroom/tmp/ --fields-terminated-by='|!?|'
mysql> load data infile "/usr/local/myroom/tmp/book.txt" into table book fields terminated by "|!?|";
/usr/bin/mysqldump -uroot -p123456 sltest book -t -T /usr/local/myroom/tmp/ --fields-terminated-by='|!?|' --lines-terminated-by='$#$'
mysql> load data infile "/usr/local/myroom/tmp/book.txt" into table book fields terminated by "|!?|" lines terminated by '$#$';

  六、mysqlimport導入操作 

  1)查看並開啟local_infile參數

mysql> show global variables like 'local_infile';
mysql> set global local_infile = 'on';

  2)將數據book.txt導入到數據庫sltest的book表

/usr/bin/mysqldump -uroot -p123456 sltest book -t -T /usr/local/myroom/tmp/ --fields-terminated-by='|!?|' --lines-terminated-by='$#$'
/usr/bin/mysqlimport -uroot -p123456 --local sltest /usr/local/myroom/tmp/book.txt --fields-terminated-by='|!?|' --lines-terminated-by='$#$'

  3)將數據book.dat導入到數據庫sltest的book表

mysql> select * from book into outfile '/usr/local/myroom/tmp/book.dat' fields terminated by '|!?|' lines terminated by '$#$';
/usr/bin/mysqlimport -uroot -p123456 --local sltest /usr/local/myroom/tmp/book.dat --fields-terminated-by='|!?|' --lines-terminated-by='$#$'

  七、定時備份

  1)寫腳本(后面會單獨寫一個詳細的,本篇不是重點,不再寫了)

#!/bin/bash
mysqldump -uroot -p123456 mydb1 > /var/mysql/backup/mydb1_$(date +%Y%m%d_%H%M%S).sql

  2)配置定時任務

crontab -e

  定時計划如下,每天晚上23:30備份。

30 23 * * * sh /usr/local/myshell/mysql/database_backup.sh

  定時任務相關知識,參考點擊這里

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM