本篇介紹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
定時任務相關知識,參考點擊這里