經過mysqldump生成包含SQL語句的文件,而後將其應用到目標機器的mysql客戶端程序。mysql
mysqldump --help 能夠獲取mysqldump選項以及用法。linux
若是源服務器上啓用了GTID模式,在默認狀況下,mysqldump生成的DUMP文件包含GTID信息。若是目標機器沒有啓用GTID會致使導入出現問題。能夠經過--set-gtid-purged 選項作調整。sql
--set-gtid-purged 選項目前有四個可選值:ON, COMMENTED, OFF 和 AUTO數據庫
下面是一些用法,好比:緩存
最簡單(儘管不是最快速)的方式在兩臺機器之間傳遞數據以下:服務器
mysqladmin -h 'other_hostname' create db_name 網絡
mysqldump db_name | mysql -h 'other_hostname' db_nameoracle
好比:工具
mysqldump -uroot -poracle --databases test | mysql -uroot -poracle -h192.168.1.150優化
若是是從遠端數據庫傳遞數據,並且網絡比較慢的話,能夠經過mysqldump工具提供的壓縮選項作一些優化
mysqladmin create db_name
mysqldump -h 'other_hostname' --compress db_name | mysql db_name
好比:
mysqldump -uroot -poracle -h192.168.1.150 --compress --databases test | mysql -uroot -poracle
能夠經過在源端,使用mysqldump工具生成DUMP文件,而後拷貝的目標端,再經過mysql客戶端程序應用
mysqldump --quick db_name | gzip > db_name.gz
mysqladmin create db_name
gunzip < db_name.gz | mysql db_name
注:--quick 選項:不緩存mysqldump工具生成的query。好比:
mysqldump -uroot -poracle --quick --databases test | gzip > test.gz
scp test.gz root@192.168.1.150:~
gunzip < test.gz | mysql -uroot -poracle
經過mysqldump與mysqimport的組合,在處理大表的狀況下,比單個的mysqldump更快一些
mkdir DUMPDIR
mysqldump --tab=DUMPDIR db_name
mysql -e "create db_name" # create database
cat DUMPDIR/*.sql | mysql db_name # create tables in database
mysqlimport db_name DUMPDIR/*.txt # load data into tables
好比:
cd /usr/local/mysql-8.0.18-linux-glibc2.12-x86_64/data/
mkdir DUMPDIR
chown mysql:mysql DUMPDIR
mysqldump -uroot -poracle --tab=./DUMPDIR test
scp -r DUMPDIR/ root@192.168.1.150:/usr/local/mysql-8.0.18-linux-glibc2.12-x86_64/data/
chown -R mysql:mysql /usr/local/mysql-8.0.18-linux-glibc2.12-x86_64/data/DUMPDIR
mysql -uroot -poracle -e "create database test;"
cat DUMPDIR/*sql | mysql -uroot -poracle test
mysqlimport -uroot -poracle test DUMPDIR/*.txt
注:兩端的服務器須要配置secure_file_priv 環境變量。
補充:
有時可能須要拷貝mysql schema,由於mysql schema中標受權表,若是沒有數據庫沒有mysql schema前提下。在導入mysql schema,使用 mysqladmin flush-privileges 使得MySQL Server加載受權表信息。