27.MySQL備份與恢復
27.備份與恢復
27.1 備份/恢復策略
考慮因素:
備份表的存儲引擎(事務性or非事務性);
全備份or增量備份
用復制做異地備份
定期備份,考慮恢復時間
確保mysql打開log-bin,有了BINLOG,Mysql才可以在必要的時候做完整恢復,或基於時間點的恢復,或基於位置的恢復
經常做備份恢復測試,確保備份的有效性。
27.2 邏輯備份和恢復
優點:對於各種存儲引擎都可以用同樣的方法來備份。
缺點:速度慢,不適合比較大的數據庫。
27.2.1 備份
將數據庫中的數據備份為一個文本文件,備份的文件可以被查看和編輯。
備份工具:mysqldump
備份方式:
備份指定的表:mysqldump [options] db_name [tables] > table_name.sql
備份所有的庫:mysqldump [options] --all-database > all.sql
備份所有的庫語法:
mysqldump -u root -proot --all > C:\db_file\all.sql ???
備份scott庫語法:
mysqldump -u root -proot scott > C:\db_file\scott.sql
備份scott庫和world庫語法:
mysqldump -u root -proot ---database scott world > C:\db_file\scott_world.sql ???
mysqldump -u root -proot scott dept > C:\db_file\dept.sql
備份scott庫下的dept表和emp表語法:
mysqldump -u root -proot scott dept emp > C:\db_file\dept_emp.sql
例子:
-- 測試
mysqldump -h 192.168.7.245 -P 25006 -u root -puniGroup-321 zgai_db company > E:\db_file\company.sql
mysqldump -h 192.168.7.245 -P 25006 -u root -puniGroup-321 zgai_db LC_MainSHListNew > E:\db_file\LC_MainSHListNew.sql
mysqldump -h 192.168.7.245 -P 25006 -u root -puniGroup-321 zgai_db AI_company_info AI_com_id AI_conpany_augment AI_const AI_leader_info AI_leader_info_old AI_pes_id AI_shareholder_info AI_shareholder_j_info AI_shareholder_p AI_shareholder_p_info AI_trade_date > E:\db_file\AI.sql
mysqldump -h 192.168.7.245 -P 25006 -u root -puniGroup-321 zgai_db company company_A_stock company_shareholder company_S_temp fundp_S_temp fund_product fund_product_shareholder person person_leader person_shareholder person_S_temp > E:\db_file\KG_node.sql
mysqldump -h 192.168.7.245 -P 25006 -u root -puniGroup-321 zgai_db shareholding shareholding_company_temp shareholding_person_temp shareholding_fundp_temp Tenure Tenure_temp > E:\db_file\KG_relation.sql
mysqldump -h 192.168.7.245 -P 25006 -u root -puniGroup-321 zgai_db today_all area_classified user_info search_log > E:\db_file\Wangqingxia.sql
mysqldump -h 192.168.7.245 -P 25006 -u root -puniGroup-321 zgai_db com_mainfinaindexnas_temp COM_QMainFinaDataNAS > E:\db_file\Liubowen.sql
mysqldump -h 192.168.7.245 -P 25006 -u root -puniGroup-321 zgai_db EPS_PETTM > E:\db_file\Zhangyanchao.sql
mysqldump -h 192.168.7.245 -P 25006 -u root -puniGroup-321 zgai_db error_log execute_log jydb_Incremental map_jy_hk SecuMain > E:\db_file\Common.sql
mysqldump -h 192.168.7.245 -P 25006 -u root -puniGroup-321 zgai_db LC_MainSHListNew > E:\db_file\LC_MainSHListNew.sql
mysqldump -h 192.168.7.245 -P 25006 -u root -puniGroup-321 zgai_db NI_NewsInfo > E:\db_file\NI_NewsInfo.sql
mysqldump -h 192.168.7.245 -P 25006 -u root -puniGroup-321 zgai_db LC_TextAnnounce > E:\db_file\LC_TextAnnounce.sql
導出選項設置:
--extended-insert 默認,使用批量導入,每行1M
--skip-extended-insert 使用單行導入
系統參數
show VARIABLES like ‘%autocommit%‘; --自動提交設置
27.2.2 完全恢復
將備份文件作為輸入執行即可。
mysql [options] db_name < backfile
例子:
-- 測試
mysql -h stage-mysql.c5immry9azen.rds.cn-north-1.amazonaws.com.cn -P 3306 -u stageprisvq7zv5l -paeP5high70fd3lgc --default-character-set=utf8 zgai_db < E:\db_file\company.sql
-- 正式
mysql -h stage-mysql.c5immry9azen.rds.cn-north-1.amazonaws.com.cn -P 3306 -u stageprisvq7zv5l -paeP5high70fd3lgc --default-character-set=utf8 zgai_db < E:\db_file\AI.sql
mysql -h stage-mysql.c5immry9azen.rds.cn-north-1.amazonaws.com.cn -P 3306 -u stageprisvq7zv5l -paeP5high70fd3lgc --default-character-set=utf8 zgai_db < E:\db_file\KG_node.sql
mysql -h stage-mysql.c5immry9azen.rds.cn-north-1.amazonaws.com.cn -P 3306 -u stageprisvq7zv5l -paeP5high70fd3lgc --default-character-set=utf8 zgai_db < E:\db_file\KG_relation.sql
mysql -h stage-mysql.c5immry9azen.rds.cn-north-1.amazonaws.com.cn -P 3306 -u stageprisvq7zv5l -paeP5high70fd3lgc --default-character-set=utf8 zgai_db < E:\db_file\Wangqingxia.sql
mysql -h stage-mysql.c5immry9azen.rds.cn-north-1.amazonaws.com.cn -P 3306 -u stageprisvq7zv5l -paeP5high70fd3lgc --default-character-set=utf8 zgai_db < E:\db_file\Liubowen.sql
mysql -h stage-mysql.c5immry9azen.rds.cn-north-1.amazonaws.com.cn -P 3306 -u stageprisvq7zv5l -paeP5high70fd3lgc --default-character-set=utf8 zgai_db < E:\db_file\Zhangyanchao.sql
mysql -h stage-mysql.c5immry9azen.rds.cn-north-1.amazonaws.com.cn -P 3306 -u stageprisvq7zv5l -paeP5high70fd3lgc --default-character-set=utf8 zgai_db < E:\db_file\Common.sql
mysql -h stage-mysql.c5immry9azen.rds.cn-north-1.amazonaws.com.cn -P 3306 -u stageprisvq7zv5l -paeP5high70fd3lgc --default-character-set=utf8 zgai_db < E:\db_file\LC_MainSHListNew.sql
mysql -h stage-mysql.c5immry9azen.rds.cn-north-1.amazonaws.com.cn -P 3306 -u stageprisvq7zv5l -paeP5high70fd3lgc --default-character-set=utf8 zgai_db < E:\db_file\NI_NewsInfo.sql
mysql -h stage-mysql.c5immry9azen.rds.cn-north-1.amazonaws.com.cn -P 3306 -u stageprisvq7zv5l -paeP5high70fd3lgc --default-character-set=utf8 zgai_db < E:\db_file\LC_TextAnnounce.sql
增加字符集設置可以減少導入過程中的報錯。
導入相關系統參數如下:
max_allowed_packet
mysql根據max_allowed_packet參數會限制server接受的數據包大小,有時候大的插入和更新會被max_allowed_packet 參數限制掉,導致失敗。
slave_max_allowed_packet
這個新參數將在5.1.64, 5.5.26和5.6.6版本裏生效,為從服務器(IO線程)設定一個和max_allowed_packet不同的限制 . 現在從服務器端最大的數據包大小由這個參數決定,而不是max_allowed_packet.
目的是為了緩解復制大的read_buffer_size是被中斷的BUG。這個BUG沒有被修復,但是現在有了一個官方解決方案,使用一個新的配置參數去緩解這個問題。
net_buffer_length
每個客戶端連接時,用於維持連接緩沖,初始分配預設值,在有需要時,則會自動擴大到max_allowed_packet大小,然後在回收預設的net_buffer_length大小 最小1k 最大1m默認16k
Mysqldump時每個extended insert行長度不能超過net-buffer-length的值。
註意:
備份文件恢復後還需要恢復備份後執行的日誌文件(binlog)。
mysqlbinlog binlog-file | mysql -u root -p***
完整備份恢復例子:
0)啟用BINLOG
set gloable log-bin=1;
1)備份數據庫
mysqldump -uroot-ppassword -l -F test>test.dmp
-l選項指給所有表增加讀鎖。
-F選項指新生成一個二進制日誌文件。
2)插入新數據
備份完成後插入新的數據
insert into ...,
然後模擬數據庫故障,數據文件損壞。
3)恢復數據庫
mysql -uroot -ppassword test<test.dmp
4)恢復BINLOG
mysqlbinlog localhost-bin.000xxx | mysql -uroot -ppassword test
27.2.3 基於時間點恢復
不完全恢復指跳過部分語句(誤操作語句)的恢復。
不完全恢復分為基於時間點恢復和基於位置恢復兩種。
例子:跳過10點整1分鐘的SQL語句
mysqlbinlog --stop-date="2019-01-01 10:00:00" localhost-bin.000xxx | mysql -uroot -ppassword test
mysqlbinlog --start-date="2019-01-01 10:01:00" localhost-bin.000xxx | mysql -uroot -ppassword test
27.2.4 基於位置恢復
將某個時間段內的binlog轉儲為文本文件:
mysqlbinlog --start-date="2019-01-01 10:00:00" --stop-date="2019-01-01 10:05:00" localhost-bin.000xxx > restore.sql
找到誤操作語句前後的position,分別按照前後position恢復。
mysqlbinlog --stop-position=123456 localhost-bin.000xxx | mysql -uroot -ppassword test
mysqlbinlog --start-position=123460 localhost-bin.000xxx | mysql -uroot -ppassword test
27.3 物理備份和恢復
物理備份分為冷備份和熱備份。
物理備份基於文件拷貝,優點是速度快,缺點是不同存儲引擎方法不同。
27.3.1 冷備份
冷備份指停掉數據庫服務,拷貝數據文件和日誌文件到備份目錄下。
冷備份適用於InnoDB引擎和MyISAM引擎。
冷備份優點是速度快,缺點是停數據庫。
冷備份恢復時也需要停掉數據庫服務,用備份文件覆蓋數據文件和日誌文件,再啟動數據庫並恢復上次備份後的binlog。
27.3.2 熱備份
熱備份指在不停止數據庫服務時拷貝數據文件。
1.熱備份MyISAM
給需要備份的表加讀鎖,再拷貝數據文件到備份目錄下。
1.1 使用mysqlhotcopy工具
#>mysqlhotcopy db_name [/path/to/new_directory]
1.2 手動鎖表+copy
mysql>flush tables for read;
#>cp 數據文件 [/path/to/new_directory]
2.熱備份InnoDB
ibbackup工具(收費,免費使用1個月),
2.1 備份步驟如下:
參照my.cnf編輯backup-my.cnf,參數包括:
datadir=/home/mysql/data datadir=/home/mysql/backup
innodb_data_home_dir=/home/mysql/data innodb_data_home_dir=/home/mysql/backup
innodb_log_group_home_dir=/home/mysql/data innodb_log_group_home_dir=/home/mysql/backup
備份命令:ibbackup my.cnf backup-my.cnf 需要保證備份目錄下沒有同名的文件。
備份目錄下生成了所有的數據文件和日誌文件。
生成的日誌文件中記錄了備份過程中數據庫的操作,用於保證恢復的完整性和一致性。
2.2 恢復步驟如下:
進行日誌重做
ibbackup --apply-log backup-my.cnf
恢復後重啟數據庫服務
./bin/mysqld_saft --defaults-file=backup-my.cnf &
再用binlog恢復備份點到故障點的數據
mysqlbinlog localhost-bin.000xxx | mysql -uroot -ppassword test
3.innobackupex工具備份恢復原理
3.1 全量備份
首先開啟一個後臺檢測進程,實施檢測mysql redo的變化,發現有redo寫入時,將redo同時寫入xtrabackup_log中;
復制InnoDB的數據文件和系統表空間文件ibdata1;
復制結束後增加讀鎖防止執行DDL操作,執行flush tables with read lock;
復制.frm、.MYI、.MYD等文件;
獲取binlog的位置;
釋放鎖,unlock tables;
停止xtrabackup_log。
3.2 全量恢復
用備份文件覆蓋數據文件,並執行xtrabackup_log文件。
3.3 增量備份
增量備份即只拷貝有變更的數據塊,通過頁上的LSN和xtrabackup_checkpoint中給定的LSN比較,確定塊是否有更新。
全量備份第二步時(復制InnoDB的數據文件和系統表空間文件ibdata1;)只拷貝有變更的塊。
3.4 增量恢復
恢復全量數據,恢復增量數據,恢復xtrabackup_log,恢復binlog,回滾未提交的數據。
4.innobackupex工具備份恢復示例
4.1 innobackupex下載安裝
從http://www.percona.com下載和安裝Percona XtraBackup軟件:
wget -c http://www.percona.com/redir/downloads/XtraBackup-2.1.2/binary/Linux/x86_64/percona-xtrabackup-2.1.2-611.tar.gz
tar xvzf percona-xtrabackup-2.1.2-611.tar.gz
cd percona-xtrabackup-2.1.2
mv percona-xtrabackup-2.1.2 /usr/local/xtrabackup
export PATH=/usr/local/xtrabackup/bin/:$PATH
4.2 全量備份及恢復
創建備份用戶並授權
mysql> create user ‘backup‘@‘%‘ identified by ‘123456‘;
mysql> grant reload,lock tables,replication client,create tablespace,super on *.* to ‘backup‘@‘%‘;
規劃好備份路徑為mkdir -p /data/backup/hotbackup/
創建innobackupex的配置文件/tmp/my.cnf,內容如下:
[mysqld]
datadir="/home/mysql_test/mysqlhome/data"
innodb_data_home_dir="/home/mysql_test/mysqlhome/data1"
innodb_data_file_path="ibdata1:10M:autoextend"
innodb_log_group_home_dir="/home/mysql_test/mysqlhome/data"
innodb_log_files_in_group=2
innodb_log_file_size=536870912
創建測試表
mysql> create table test(id int auto_increment not null primary key,name varchar(20));
mysql> insert into test (name) values (‘test1‘);
mysql> insert into test (name) values (‘test2‘);
mysql> insert into test (name) values (‘test3‘);
mysql> insert into test (name) values (‘test4‘);
進行全量備份
innobackupex --user=backup --password=123456 --socket=/tmp/mysql_test.sock --defaults-file=/tmp/my.cnf /data/backup/hotbackup/full --no-timestamp
恢復全量備份
innobackupex --apply-log --use-memory=20G /data/backup/hotbackup/full
恢復備份到MySQL的數據文件目錄:先關閉MySQL,重命名原數據文件目錄,再創建新的數據文件目錄,將備份數據復制到新的目錄下,授權,啟動MySQL。
mysqladmin -S /tmp/mysql_test.sock shut
mv /home/mysql_test/mysqlhome/data /home/mysql_test/mysqlhome/data_bak
mkdir /home/mysql_test/mysqlhome/data
innobackupex --defaults-file=/tmp/my.cnf --copy-back --rsync /data/backup/hotbackup/full/
chown -R mysql:test:mysql_test /home/mysql_test/mysqlhome/data
cd /home/mysql_test/mysqlhome
./bin/mysql_safe -user=mysql &
檢驗恢復後數據庫的一致性,即通過test表的數據檢查:
mysql> select * from test;
4.3 增量備份
第一次增量備份是基於全備的,之後的增量備份基於上一次的增量備份。
先進行一次全量備份:
innobackupex --user=backup --password=123456 --socket=/tmp/mysql_test.sock --defaults-file=/tmp/my.cnf /data/backup/hotbackup/full --no-timestamp
增加數據
mysql> insert into test (name) values (‘test5‘);
mysql> insert into test (name) values (‘test6‘);
第一次增量備份基於全備
innobackupex --user=backup --password=123456 --socket=/tmp/mysql_test.sock --defaults-file=/tmp/my.cnf
--incremental /data/backup/hotbackup/incremental_1 --incremental-basedir=/data/backup/hotbackup/full --no-timestamp --parallel=2
再增加數據
mysql> insert into test (name) values (‘test7‘);
mysql> insert into test (name) values (‘test8‘);
之後的增量備份基於上一次的增量備份
innobackupex --user=backup --password=123456 --socket=/tmp/mysql_test.sock --defaults-file=/tmp/my.cnf
--incremental /data/backup/hotbackup/incremental_2 --incremental-basedir=/data/backup/hotbackup/incremental_1 --no-timestamp --parallel=2
4.4 增量備份恢復
恢復基礎備份,加--redo-only選項
innobackupex --apply-log --redo-only --use-memory=20G /data/backup/hotbackup/full
--redo-only指只應用xtrabackup日誌中已經提交的事務數據,不回滾還未提交的數據
將增量備份應用到基礎備份,加--redo-only選項
innobackupex --apply-log --redo-only --use-memory=20G /data/backup/hotbackup/full --incremental-dir=/data/backup/hotbackup/incremental_1/
將最後一個增量備份應用到基礎備份,不加--redo-only選項
innobackupex --apply-log --use-memory=20G /data/backup/hotbackup/full --incremental-dir=/data/backup/hotbackup/incremental_2/
將合並後的基礎備份做一次apply操作,並回滾未提交的數據:
innobackupex --apply-log --use-memory=20G /data/backup/hotbackup/full
把恢復完成的備份復制到數據文件目錄中,賦權並啟動MySQL
mysqladmin -S /tmp/mysql_test.sock shut
mv /home/mysql_test/mysqlhome/data /home/mysql_test/mysqlhome/data_bak
mkdir /home/mysql_test/mysqlhome/data
innobackupex --defaults-file=/tmp/my.cnf --copy-back --rsync /data/backup/hotbackup/full/
chown -R mysql:test:mysql_test /home/mysql_test/mysqlhome/data
cd /home/mysql_test/mysqlhome
./bin/mysql_safe -user=mysql &
驗證數據
mysql> select * from test;
4.5 不完全恢復
不完全恢復指基於位置或時間點分兩次恢復,以跳過錯誤操作的位置或時間點。
查看備份文件
cd /data/backup/hotbackup/full/yyyymmdd
ls -l
從xtrabackup_binlog_info中查看備份結束時刻的binlog文件名和位置。
cat xtrabackup_binlog_info
查看當前數據庫的binlog的文件名和位置。
mysql> show master logs;
從全備中恢復數據庫,恢復全備;再從熱備結束時刻binlog的位置開始,恢復到誤操作時刻之前的binlog。
mysqlbinlog --start-position="熱備結束時刻binlog的位置" --stop-datetime="誤操作時刻" 所涉及的binlog文件名(多個文件用空格分隔) | mysql -uroot -p******
跳過故障點後,應用之後的所有binlog文件,完成恢復操作。
mysqlbinlog --start-datetime="誤操作後的時刻" 所涉及的binlog文件名(多個文件用空格分隔) | mysql -uroot -p******
4.6 克隆slave
克隆應用於在線添加從庫的業務場景。
--slave-info選項會將Master的binlog的文件名和偏移位置保存到xtrabackup_slave_info文件中。
--safe-slave-backup選項為了保證復制的一致性,會暫停Slave的SQL線程,直到沒有打開的臨時表的時候開始備份,待備份結束後再啟動SQL線程。
在備機上進行備份:
innobackupex --user=backup --password=123456 --socket=/tmp/mysql_test.sock --defaults-file=/tmp/my.cnf
--slave-info --safe-slave-backup /data/backup/hotbackup/cloneslave --no-timestamp --parallel=2
查看生成的文件:
ls -lrt /data/backup/hotbackup/cloneslave
查看xtrabackup_slave_info文件內容,即新備機開啟復制的change master語句:
cat /data/backup/hotbackup/cloneslave/xtrabackup_slave_info
在備機上進行還原:
innobackupex --apply-log --redo-only --use-memory=20G /data/backup/hotbackup/cloneslave
將還原後的文件復制到新備機
rsync -avprP -e ssh /data/backup/hotbackup/cloneslave newslave:/home/mysql_test/mysqlhome/data
在主庫上創建對新備機的復制用戶,並授權;
mysql> create user
mysql> grant
在新備機上拷貝備機的my.cnf文件,並修改server-id參數
scp slave:/etc/my.cnf /etc/my.cnf
vi /etc/my.cnf
skip-slave-start
server-id=3
log-slave-updates=1
在新備機上運行xtrabackup_slave_info文件中的change master語句:
mysql> change master to
啟動新備機的MySQL,並檢查復制線程是否正常(I/O,SQL):
mysql> start slave;
27.4 表的導入導出
27.4.1 導出
將表中數據導出為某些符號分隔的純文本數據,而不是SQL語句。
純文本數據優點:節省空間,加載速度快(是SQL的20倍),可用於execl顯示。
1.select ... into outfile
語法:
SELECT * FROM tab_name INTO OUTFILE file_name [option];
option選項包括(char為單個字符,string可以是多個字符的組合):
fields terminated by ‘string‘ --指定string為字段分隔符,默認為制表符‘\t‘
fields [optionally] enclosed by ‘char‘ --字段引用符,如果加optionally選項則只用在char、varchar、text等字符類型上。默認不使用引用符。
fields escaped by ‘char‘ --轉義字符,默認‘\‘,
lines starting by ‘string‘ --指定string為每行開始符,默認‘‘
lines terminated by ‘string‘ --指定string為行結束符,默認‘\n‘
例子1:字段分隔符‘,‘ 字段引用符為‘"‘ --結果是所有字段(包括數值類型的字段)的值都被雙引號括起來。
mysql>select * from emp into outfile ‘/tmp/emp.txt‘ fields terminated by ‘,‘ enclosed by ‘"‘;
在mysql客戶端執行操作系統命令的方法:system+操作系統命令
mysql>system cat /tmp/emp.txt
例子2:字段分隔符‘,‘ 字段引用符‘"‘只引用文本類型需要增加optionally子選項。
mysql>select * from emp into outfile ‘/tmp/emp.txt‘ fields terminated by ‘,‘ optionally enclosed by ‘"‘;
MySQL導出數據中轉義字符本身、字段分隔符、記錄分隔符將被轉義:
當導出命令中包含字段引用符時,數據中含有的轉義字符本身和字段引用符的字符會被自動轉義;
當導出命令中不包含字段引用符時,數據中含有的轉義字符本身和字段分隔符的字符會被自動轉義。
註意:
select ... into outfile ...產生的輸出文件不能重名,新文件不會覆蓋原來文件,即不會生成新文件。
2.mysqldump
語法:
mysqldump -u 用戶名 -T 目標文件 db_name tab_name [option]
option選項包括:
--fields-terminated-by=name --字段分隔符
--fields-enclosed-by=name --字段引用符
--fields-optionally-enclosed-by=name --文本類型的字段引用符
--fields-escaped-by=name --轉義字符
--lines-terminated-by=name --記錄結束符
例子:
# mysqldump -uroot -T /tmp test emp --fields-terminated-by ‘,‘ --fields-optionally-enclosed-by ‘"‘
該命令生成了emp.txt(文本數據)和emp.sql(建表語句)
# more /tmp/emp.txt
# more /tmp/emp.sql
總結:mysqldump工具實際就是調用了select ... into outfile ...語句。
27.4.2 導入
將純文本數據導入到數據庫表中。
1.load data infile
語法:
mysql> load data [local] infile ‘file_name‘ into table tab_name [option];
option選項包括(char為單個字符,string可以是多個字符的組合):
fields terminated by ‘string‘ --指定string為字段分隔符,默認為制表符‘\t‘
fields [optionally] enclosed by ‘char‘ --字段引用符,如果加optionally選項則只用在char、varchar、text等字符類型上。默認不使用引用符。
fields escaped by ‘char‘ --轉義字符,默認‘\‘,
lines starting by ‘string‘ --指定string為每行開始符,默認‘‘
lines terminated by ‘string‘ --指定string為行結束符,默認‘\n‘
ignore number lines --忽略文件的前number行數據
(col_name_or_user_var,...) --按照列出的字段順序和字段數量加載數據
set col_name=expr,... --將列做一定的數值轉換後再加載
例子1:
mysql> load data infile ‘/tmp/emp.txt‘ into table emp fields terminated by ‘,‘ enclosed by ‘"‘;
例子2:不加載前2行
mysql> load data infile ‘/tmp/emp.txt‘ into table emp fields terminated by ‘,‘ enclosed by ‘"‘ ignore 2 lines;
例子3:按指定列順序加載
mysql> load data infile ‘/tmp/emp.txt‘ into table emp fields terminated by ‘,‘ enclosed by ‘"‘ ignore 2 lines (id,content,name);
例子4:只加載部分列
mysql> load data infile ‘/tmp/emp.txt‘ into table emp fields terminated by ‘,‘ enclosed by ‘"‘ ignore 2 lines (id);
例子5:加載時對列進行運算
mysql> load data infile ‘/tmp/emp.txt‘ into table emp fields terminated by ‘,‘ enclosed by ‘"‘ set id=id+10;
2.mysqlimport
語法:
# mysqlimport -uroot -p*** [local] db_name file_name [option]
option選項包括:
--fields-terminated-by=name --字段分隔符
--fields-enclosed-by=name --字段引用符
--fields-optionally-enclosed-by=name --文本類型的字段引用符
--fields-escaped-by=name --轉義字符
--lines-terminated-by=name --記錄結束符
--ignore-lines=number --忽略前number行
例子:
# mysqlimport -uroot -proot test /tmp/emp.txt --fields-terminated-by=‘,‘ --fields-enclosed-by=‘"‘
註意:
不同操作系統平臺行結尾符不同,Windows平臺設置lines-terminated-by=‘\r\n‘,Linux平臺設置lines-terminated-by=‘\n‘,IOS平臺lines-terminated-by=‘\r‘。
27.5 小結
27.MySQL備份與恢復