【MySQL】load data語句詳解(三)

沃趣科技發表於2017-05-23

作者 羅小波

沃趣科技高階MySQL資料庫工程師



2、批次匯出和批次匯入

  • 使用mysqldump批次匯出生成表的txt檔案,並使用mysqlimport批次匯入表的txt檔案到資料庫中

2.1. 使用mysqldump批次匯出

  • 使用mysqldump匯出資料為文字的語法如下:
  1. mysqldump -u username -p'xxx' -T target_dir db_name tb_name [option];
  • 其中option引數是以下幾種可選引數:
    –fields-terminated-by 'string' 欄位分隔符
    –fields-enclosed-by 'char' 欄位引用符
    –fields-optionally-enclosed-by 'char' 欄位引用符,只在char,varchar,text等欄位型別上生效
    –fields-escaped-by 'char' 跳脫字元
    –lines-terminated-by 'string' 記錄結束符,即換行符

  • 示例

    1. $ mkdir /data/backup/
    2. $ chown mysql.mysql /data/backup -R
    3. $ mysqldump -uadmin -pletsg0 -h 10.10.30.241 --single-transaction --master-data=2 --triggers --routines --events xiaoboluo -T /data/backup/
    4. mysqldump: [Warning] Using a password on the command line interface can be insecure.
    5. Warning: A partial dump from a server that has GTIDs will by default include the GTIDs of all transactions, even those that changed suppressed parts of the database.\
    6.  If you don't want to restore GTIDs, pass --set-gtid-purged=OFF. To make a complete dump, pass --all-databases --triggers --routines --events.
    7. SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN;
    8. SET @@SESSION.SQL_LOG_BIN= 0;
    9. --
    10. -- GTID state at the beginning of the backup
    11. --
    12. SET @@GLOBAL.GTID_PURGED='2016f827-2d98-11e7-bb1e-00163e407cfb:1-114';
    13. --
    14. -- Position to start replication or point-in-time recovery from
    15. --
    16. -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000005', MASTER_LOG_POS=21737; #使用-T選項時,--master-data=2列印的binlog pos資訊會直接列印在標準輸出上
    17. --
    18. -- Dumping events for database 'xiaoboluo'
    19. --
    20. --
    21. -- Dumping routines for database 'xiaoboluo

2.2. 使用mysqimport批次匯出

2.2.1. mysqlimport語法及其引數說明
  • mysqlimport實用程式載入資料檔案時,它透過向伺服器傳送LOAD DATA INFILE語句來實現(它實際是客戶端提供了load data infile語句的一個命令列介面),可以使用–local選項使mysqlimport從客戶端主機(而不是mysql server主機)讀取資料檔案。如果客戶端和伺服器支援壓縮協議,則可以指定–compress選項以在慢速網路中獲得更好的效能。

  • 使用mysqlimport命令,語法如下:

    1. mysqlimport -uroot -p 'xxx' [--local] db_name order_tab.txt [iption]
  • 其中,option引數可以是如下選項
    1. --fields-terminated-by=name 指定欄位分隔符
    2. --fields-enclosed-by=name 指定欄位引用符
    3. --fields-optionally-enclosed-by=name 指定欄位引用符,但只在char、varchar、text欄位上使用引用符
    4. --fields-escaped-by=name 指定跳脫字元
    5. --lines-terminated-by=name 指定行記錄結束符(換行符)
    6. --ignore-liens=number 忽略前幾行
    7. --low-priority 碰到有其他執行緒update操作操作的表與匯入操作表相同時,延遲執行匯入操作
    8. -i, --ignore 如果碰到唯一鍵衝突就忽略衝突行匯入
    9. -r, --replace 如果碰到唯一鍵衝突就覆蓋衝突行匯入
    10. -L, --local 從客戶端主機載入資料文字檔案
    11. -C, --compress 在C/S模型之間使用壓縮傳輸資料
    12. -c, --columns=name 指定需要匯入哪些列,與load data語句中一樣需要指定表定義中真實的列名,有多個列名時使用逗號分隔
    13. --default-character-set=name 設定使用該選項指定的字符集來解析文字檔案中的內容
    14. -h, --host 指定匯入server的主機IP
    15. -p, --password[=name] 指定匯入server的使用者密碼
    16. -P, --port=# 指定匯入server的監聽埠
    17. --use-threads=# 指定多少個執行緒併發執行load data語句(實測單表時指定多執行緒時要比單執行緒要快,由於資料量小,測試出來的差別並不大,官方並沒有說明是基於什麼級別的併發,\
    18. 只寫了一句:Load files in parallel using N threads,推測可能是基於類似mydumper的併發,但是多表匯入時指定多執行緒就明顯比單執行緒要快很多)
    19. -u, --user=name 指定匯入server的使用者名稱
    20. -d, --delete 指定匯入操作之前先把表清空(實測重複匯入時加了這個選項之後可以正常執行,,透過解析binlog發現,發現binlog中記錄的第二次和第一次匯入的語句完全相同是,\
    21. 第二次匯入時如果發現表中有衝突資料,就先執行的不帶where條件的delete,所有表先delete掉,然後再執行load data語句匯入資料,另外,當與replace一起使用時,忽略replace選項)
2.2.2. mysqlimport用法演示示例
  • 先執行清理server中表的資料
    1. admin@localhost : (none) 11:08:58> use xiaoboluo
    2. Database changed
    3. admin@localhost : xiaoboluo 11:09:00> show tables;
    4. +---------------------+
    5. | Tables_in_xiaoboluo |
    6. +---------------------+
    7. | test |
    8. | test2 |
    9. | test3 |
    10. | test4 |
    11. +---------------------+
    12. 4 rows in set (0.00 sec)
    13. admin@localhost : xiaoboluo 11:09:01> select * from test;
    14. +----+------+-------+
    15. | id | test | test2 |
    16. +----+------+-------+
    17. | 2 | 1 | 2 |
    18. | 4 | 2 | NULL |
    19. | 6 | null | NULL |
    20. | 8 | 4 | NULL |
    21. | 10 | | NULL |
    22. | 12 | \\t | NULL |
    23. | 14 | t | NULL |
    24. | 16 | \t | NULL |
    25. | 18 | t | NULL |
    26. | 20 | NULL | NULL |
    27. | 22 | "t | NULL |
    28. +----+------+-------+
    29. 11 rows in set (0.00 sec)
    30. admin@localhost : xiaoboluo 11:09:11> system cat /data/backup/test.txt;
    31. 2 1 2
    32. 4 2 \N
    33. 6 null \N
    34. 8 4 \N
    35. 10 \ \N
    36. 12 \\\\t \N
    37. 14 t \N
    38. 16 \\t \N
    39. 18 t \N
    40. 20 \N \N
    41. 22 "t \N  
    42. admin@localhost : xiaoboluo 11:12:08> select * from test2;
    43. +----+------+-------+---------------------+
    44. | id | test | test2 | dt |
    45. +----+------+-------+---------------------+
    46. | 2 | 1 | 2 | 2017-05-02 18:47:03 |
    47. | 4 | 2 | NULL | 2017-05-02 18:47:03 |
    48. | 6 | null | NULL | 2017-05-02 18:47:03 |
    49. | 8 | 4 | NULL | 2017-05-02 18:47:03 |
    50. | 10 | | NULL | 2017-05-02 18:47:03 |
    51. | 12 | \\t | NULL | 2017-05-02 18:47:03 |
    52. | 14 | t | NULL | 2017-05-02 18:47:03 |
    53. | 16 | \t | NULL | 2017-05-02 18:47:03 |
    54. | 18 | t | NULL | 2017-05-02 18:47:03 |
    55. | 20 | NULL | NULL | 2017-05-02 18:47:03 |
    56. +----+------+-------+---------------------+
    57. 10 rows in set (0.00 sec)
    58. admin@localhost : xiaoboluo 11:12:15> system cat /data/backup/test2.txt;
    59. 2 1 2 2017-05-02 18:47:03
    60. 4 2 \N 2017-05-02 18:47:03
    61. 6 null \N 2017-05-02 18:47:03
    62. 8 4 \N 2017-05-02 18:47:03
    63. 10 \ \N 2017-05-02 18:47:03
    64. 12 \\\\t \N 2017-05-02 18:47:03
    65. 14 t \N 2017-05-02 18:47:03
    66. 16 \\t \N 2017-05-02 18:47:03
    67. 18 t \N 2017-05-02 18:47:03
    68. 20 \N \N 2017-05-02 18:47:03
    69. admin@localhost : xiaoboluo 11:12:27> truncate test2;
    70. Query OK, 0 rows affected (0.00 sec)  
    71. admin@localhost : xiaoboluo 11:12:32> select * from test3;
    72. +----+------------------------------------------+--------+-------+
    73. | id | test | test2 | test3 |
    74. +----+------------------------------------------+--------+-------+
    75. | 2 | a string | 100.20 | null |
    76. | 4 | a string containing a , comma | 102.20 | NULL |
    77. | 6 | a string containing a " quote | 102.20 | NULL |
    78. | 8 | a string containing a ", quote and comma | 102.20 | NULL |
    79. | 10 | \t | 102.20 | NULL |
    80. | 14 | \t | 102.20 | NULL |
    81. +----+------------------------------------------+--------+-------+
    82. 6 rows in set (0.00 sec)
    83. admin@localhost : xiaoboluo 11:12:44> system cat /data/backup/test3.txt;
    84. 2 a string 100.20 null
    85. 4 a string containing a , comma 102.20 \N
    86. 6 a string containing a " quote 102.20 \N
    87. 8 a string containing a ", quote and comma 102.20 \N
    88. 10 \\t 102.20 \N
    89. 14 \\t 102.20 \N
    90. admin@localhost : xiaoboluo 11:12:59> truncate test3;
    91. Query OK, 0 rows affected (0.01 sec)
    92. admin@localhost : xiaoboluo 11:13:03> select * from test4;
    93. +----+------------------------------------------+--------+-------+---------------------+
    94. | id | test | test2 | test3 | test4 |
    95. +----+------------------------------------------+--------+-------+---------------------+
    96. | 2 | a string | 100.20 | null | 2017-05-03 18:41:02 |
    97. | 4 | a string containing a , comma | 102.20 | NULL | 2017-05-03 18:41:02 |
    98. | 6 | a string containing a " quote | 102.20 | NULL | 2017-05-03 18:41:02 |
    99. | 8 | a string containing a ", quote and comma | 102.20 | NULL | 2017-05-03 18:41:02 |
    100. | 10 | \t | 102.20 | NULL | 2017-05-03 18:41:02 |
    101. | 14 | \t | 102.20 | NULL | 2017-05-03 18:41:02 |
    102. +----+------------------------------------------+--------+-------+---------------------+
    103. 6 rows in set (0.00 sec)
    104. admin@localhost : xiaoboluo 11:13:15> system cat /data/backup/test4.txt;
    105. 2 a string 100.20 null 2017-05-03 18:41:02
    106. 4 a string containing a , comma 102.20 \N 2017-05-03 18:41:02
    107. 6 a string containing a " quote 102.20 \N 2017-05-03 18:41:02
    108. 8 a string containing a ", quote and comma 102.20 \N 2017-05-03 18:41:02
    109. 10 \\t 102.20 \N 2017-05-03 18:41:02
    110. 14 \\t 102.20 \N 2017-05-03 18:41:02
    111. admin@localhost : xiaoboluo 11:13:24> truncate test4;
    112. Query OK, 0 rows affected (0.01 sec)
    113. admin@localhost : xiaoboluo 11:13:28> flush logs;
    114. Query OK, 0 rows affected (0.01 sec)
2.2.2.1. 單表匯入
  • 使用mysqlimport命令匯入單張表
    1. [root@5f1772e3-0c7a-4537-97f9-9b57cf6a04c2 ~]# mysqlimport -uadmin -pletsg0 -h10.10.30.241 xiaoboluo /data/backup/test.txt
    2. mysqlimport: [Warning] Using a password on the command line interface can be insecure.
    3. xiaoboluo.test: Records: 11 Deleted: 0 Skipped: 0 Warnings: 0
    4.  
    5.  
    6. # 檢視資料庫中的資料
    7. admin@localhost : xiaoboluo 11:13:42> select * from test;
    8. +----+------+-------+
    9. | id | test | test2 |
    10. +----+------+-------+
    11. | 2 | 1 | 2 |
    12. | 4 | 2 | NULL |
    13. | 6 | null | NULL |
    14. | 8 | 4 | NULL |
    15. | 10 | | NULL |
    16. | 12 | \\t | NULL |
    17. | 14 | t | NULL |
    18. | 16 | \t | NULL |
    19. | 18 | t | NULL |
    20. | 20 | NULL | NULL |
    21. | 22 |
  • 解析binlog檢視裡邊如何記錄的
    1. $ mysqlbinlog -vv --base64-output=decode-rows mysql-bin.000006
    2. .....
    3. BEGIN
    4. /*!*/;
    5. # at 344
    6. #170503 23:15:29 server id 3306241 end_log_pos 443 CRC32 0x4c1c8e8a Rows_query
    7. # LOAD DATA INFILE '/data/backup/test.txt' INTO TABLE `test` IGNORE 0 LINES #mysqlimport內部呼叫的load data語句在這裡
    8. # at 443
    9. #170503 23:15:29 server id 3306241 end_log_pos 501 CRC32 0x1ddc6d53 Table_map: `xiaoboluo`.`test` mapped to number 304
    10. # at 501
    11. #170503 23:15:29 server id 3306241 end_log_pos 631 CRC32 0xa8c4beab Write_rows: table id 304 flags: STMT_END_F
    12. ### INSERT INTO `xiaoboluo`.`test` #由於binlog_format=row,所以寫到binlog中時內部把load data語句轉換為了row格式
    13. ### SET
    14. ### @1=2 /* INT meta=0 nullable=0 is_null=0 */
    15. ### @2='1' /* VARSTRING(300) meta=300 nullable=1 is_null=0 */
    16. ### @3='2' /* VARSTRING(300) meta=300 nullable=1 is_null=0 */
    17. ### INSERT INTO `xiaoboluo`.`test`
    18. ### SET
    19. ### @1=4 /* INT meta=0 nullable=0 is_null=0 */
    20. ### @2='2' /* VARSTRING(300) meta=300 nullable=1 is_null=0 */
    21. ### @3=NULL /* VARSTRING(300) meta=300 nullable=1 is_null=1 */
    22. ### INSERT INTO `xiaoboluo`.`test`
    23. ### SET
    24. ### @1=6 /* INT meta=0 nullable=0 is_null=0 */
    25. ### @2='null' /* VARSTRING(300) meta=300 nullable=1 is_null=0 */
    26. ### @3=NULL /* VARSTRING(300) meta=300 nullable=1 is_null=1 */
    27. ### INSERT INTO `xiaoboluo`.`test`
    28. ### SET
    29. ### @1=8 /* INT meta=0 nullable=0 is_null=0 */
    30. ### @2='4' /* VARSTRING(300) meta=300 nullable=1 is_null=0 */
    31. ### @3=NULL /* VARSTRING(300) meta=300 nullable=1 is_null=1 */
    32. ### INSERT INTO `xiaoboluo`.`test`
    33. ### SET
    34. ### @1=10 /* INT meta=0 nullable=0 is_null=0 */
    35. ### @2='\x09' /* VARSTRING(300) meta=300 nullable=1 is_null=0 */
    36. ### @3=NULL /* VARSTRING(300) meta=300 nullable=1 is_null=1 */
    37. ### INSERT INTO `xiaoboluo`.`test`
    38. ### SET
    39. ### @1=12 /* INT meta=0 nullable=0 is_null=0 */
    40. ### @2='\x5c\x5ct' /* VARSTRING(300) meta=300 nullable=1 is_null=0 */
    41. ### @3=NULL /* VARSTRING(300) meta=300 nullable=1 is_null=1 */
    42. ### INSERT INTO `xiaoboluo`.`test`
    43. ### SET
    44. ### @1=14 /* INT meta=0 nullable=0 is_null=0 */
    45. ### @2='t' /* VARSTRING(300) meta=300 nullable=1 is_null=0 */
    46. ### @3=NULL /* VARSTRING(300) meta=300 nullable=1 is_null=1 */
    47. ### INSERT INTO `xiaoboluo`.`test`
    48. ### SET
    49. ### @1=16 /* INT meta=0 nullable=0 is_null=0 */
    50. ### @2='\x5ct' /* VARSTRING(300) meta=300 nullable=1 is_null=0 */
    51. ### @3=NULL /* VARSTRING(300) meta=300 nullable=1 is_null=1 */
    52. ### INSERT INTO `xiaoboluo`.`test`
    53. ### SET
    54. ### @1=18 /* INT meta=0 nullable=0 is_null=0 */
    55. ### @2='t' /* VARSTRING(300) meta=300 nullable=1 is_null=0 */
    56. ### @3=NULL /* VARSTRING(300) meta=300 nullable=1 is_null=1 */
    57. ### INSERT INTO `xiaoboluo`.`test`
    58. ### SET
    59. ### @1=20 /* INT meta=0 nullable=0 is_null=0 */
    60. ### @2=NULL /* VARSTRING(300) meta=300 nullable=1 is_null=1 */
    61. ### @3=NULL /* VARSTRING(300) meta=300 nullable=1 is_null=1 */
    62. ### INSERT INTO `xiaoboluo`.`test`
    63. ### SET
    64. ### @1=22 /* INT meta=0 nullable=0 is_null=0 */
    65. ### @2='"t' /* VARSTRING(300) meta=300 nullable=1 is_null=0 */
    66. ### @3=NULL /* VARSTRING(300) meta=300 nullable=1 is_null=1 */
    67. # at 631
    68. #170503 23:15:29 server id 3306241 end_log_pos 662 CRC32 0x0cd1a6ae Xid = 756
    69. COMMIT/*!*/;
    70. ......
2.2.2.2.多表匯入
  • 清理掉test表,並重新整理一下binlog
    1. admin@localhost : xiaoboluo 11:32:19> truncate test;
    2. Query OK, 0 rows affected (0.01 sec)
    3. admin@localhost : xiaoboluo 11:35:09> flush logs;
    4. Query OK, 0 rows affected (0.01 sec)
    5. 使用mysqlimport匯入多表
    6. [root@5f1772e3-0c7a-4537-97f9-9b57cf6a04c2 binlog]# time mysqlimport -uadmin -pletsg0 -h10.10.30.241 --replace xiaoboluo /data/backup/*.txt
    7. mysqlimport: [Warning] Using a password on the command line interface can be insecure.
    8. xiaoboluo.test2: Records: 10 Deleted: 0 Skipped: 0 Warnings: 0
    9. xiaoboluo.test3: Records: 6 Deleted: 0 Skipped: 0 Warnings: 0
    10. xiaoboluo.test4: Records: 6 Deleted: 0 Skipped: 0 Warnings: 0
    11. xiaoboluo.test: Records: 11 Deleted: 0 Skipped: 0 Warnings: 0
    12. real 0m0.014s
    13. user 0m0.002s
    14. sys 0m0.002s
    15. # 多表匯入時可以使用引數--use-threads指定多個執行緒,明顯比單執行緒匯入速度要快
    16. [root@5f1772e3-0c7a-4537-97f9-9b57cf6a04c2 binlog]# time mysqlimport -uadmin -pletsg0 -h10.10.30.241 --replace --use-threads=8 xiaoboluo /data/backup/*.txt
    17. mysqlimport: [Warning] Using a password on the command line interface can be insecure.
    18. xiaoboluo.test3: Records: 6 Deleted: 0 Skipped: 0 Warnings: 0
    19. xiaoboluo.test2: Records: 10 Deleted: 0 Skipped: 0 Warnings: 0
    20. xiaoboluo.test: Records: 11 Deleted: 0 Skipped: 0 Warnings: 0
    21. xiaoboluo.test4: Records: 6 Deleted: 0 Skipped: 0 Warnings: 0
    22. real 0m0.007s
    23. user 0m0.006s
    24. sys 0m0.002s
  • 校驗資料
    1. admin@localhost : xiaoboluo 11:35:15> select * from test;
    2. +----+------+-------+
    3. | id | test | test2 |
    4. +----+------+-------+
    5. | 2 | 1 | 2 |
    6. | 4 | 2 | NULL |
    7. | 6 | null | NULL |
    8. | 8 | 4 | NULL |
    9. | 10 | | NULL |
    10. | 12 | \\t | NULL |
    11. | 14 | t | NULL |
    12. | 16 | \t | NULL |
    13. | 18 | t | NULL |
    14. | 20 | NULL | NULL |
    15. | 22 | "t | NULL |
    16. +----+------+-------+
    17. 11 rows in set (0.00 sec)
    18. admin@localhost : xiaoboluo 11:40:31> select * from test2;
    19. +----+------+-------+---------------------+
    20. | id | test | test2 | dt |
    21. +----+------+-------+---------------------+
    22. | 2 | 1 | 2 | 2017-05-02 18:47:03 |
    23. | 4 | 2 | NULL | 2017-05-02 18:47:03 |
    24. | 6 | null | NULL | 2017-05-02 18:47:03 |
    25. | 8 | 4 | NULL | 2017-05-02 18:47:03 |
    26. | 10 | | NULL | 2017-05-02 18:47:03 |
    27. | 12 | \\t | NULL | 2017-05-02 18:47:03 |
    28. | 14 | t | NULL | 2017-05-02 18:47:03 |
    29. | 16 | \t | NULL | 2017-05-02 18:47:03 |
    30. | 18 | t | NULL | 2017-05-02 18:47:03 |
    31. | 20 | NULL | NULL | 2017-05-02 18:47:03 |
    32. +----+------+-------+---------------------+
    33. 10 rows in set (0.00 sec)
    34. admin@localhost : xiaoboluo 11:40:33> select * from test3;
    35. +----+------------------------------------------+--------+-------+
    36. | id | test | test2 | test3 |
    37. +----+------------------------------------------+--------+-------+
    38. | 2 | a string | 100.20 | null |
    39. | 4 | a string containing a , comma | 102.20 | NULL |
    40. | 6 | a string containing a " quote | 102.20 | NULL |
    41. | 8 | a string containing a ", quote and comma | 102.20 | NULL |
    42. | 10 | \t | 102.20 | NULL |
    43. | 14 | \t | 102.20 | NULL |
    44. +----+------------------------------------------+--------+-------+
    45. 6 rows in set (0.00 sec)
    46. admin@localhost : xiaoboluo 11:40:34> select * from test4;
    47. +----+------------------------------------------+--------+-------+---------------------+
    48. | id | test | test2 | test3 | test4 |
    49. +----+------------------------------------------+--------+-------+---------------------+
    50. | 2 | a string | 100.20 | null | 2017-05-03 18:41:02 |
    51. | 4 | a string containing a , comma | 102.20 | NULL | 2017-05-03 18:41:02 |
    52. | 6 | a string containing a " quote | 102.20 | NULL | 2017-05-03 18:41:02 |
    53. | 8 | a string containing a
  • 解析binlog檢視(由於內容較多,這裡就不貼出來了,binlog解析的多表匯入操作在binlog中記錄的就是一個表一個load data語句)

3、總結

  • 關於使用local子句與不使用local子句的時候的差異

    • 如果load data語句使用了local子句,則客戶端使用TCP遠端連線mysql server時,沒有file許可權仍然能夠匯入文字檔案,這個時候是非常危險的,因為local子句的內部原理是從客戶端的主機讀取文字檔案並傳送到server端的/tmp目錄並儲存為一個臨時檔案,再執行load data語句的。另外,要使用local子句,還需要看server端啟動是否關閉了local_infile選項(如果不指定該選項,則服務端預設為ON),mysql client連線時是否關閉了local_infile選項(如果不指定該選項,則客戶端預設為ON),local_infile在server或client端任意一端關閉都不能使用local子句,會報錯誤:ERROR 1148 (42000): The used command is not allowed with this MySQL version

    • 如果load data語句不使用local子句,則這個時候使用者必須要有file許可權才能夠執行匯入文字檔案(並且只能夠匯入server端的本地文字檔案),如果沒有file許可權,可能報沒有file許可權的錯誤,也可能報錯:ERROR 1045 (28000): Access denied for user 'test'@'%' (using password: YES)

    • 如果不想這麼麻煩(因為要限制客戶端使用local子句在沒有file許可權的時候使用load data語句,需要在server端使用local_infile=OFF來關閉,不使用local子句時,如果使用者沒有file許可權,那很顯然不能夠使用load data語句,但是如果還想限制由具有file許可權的使用者怎麼辦?),可以使用引數secure_file_priv=null,設定為null時,全面禁止使用load data語句(不管使用local子句還是不使用都不允許執行load data語句)
  • 強調一點:在mysql的主備複製架構中,load data語句被認為是不安全的,要使得load data語句安全地進行復制,在binlog_format=mixed格式下會轉為row格式記錄,在binlog_format=statement時執行load data語句不會發出警告,而是內部透過一些列的流程來處理。具體是如何處理的呢,請看下回分解《load data語句如何保證主備複製資料一致性》

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28218939/viewspace-2139746/,如需轉載,請註明出處,否則將追究法律責任。

相關文章