Mysql

MySQL dump-restore 用 3Fh 替換字元

  • May 21, 2011

帶有 Mysql 和 make.conf 的 FreeBSD 伺服器

.if ${.CURDIR} == ${PORTSDIR}/databases/mysql50-server
WITH_CHARSET=cp1251
WITH_COLLATION=cp1251_bin
BUILD_OPTIMIZED=yes
BUILD_STATIC=yes
.endif
.if ${.CURDIR} == ${PORTSDIR}/databases/mysql50-client
WITH_CHARSET=cp1251
WITH_COLLATION=cp1251_bin
BUILD_OPTIMIZED=yes
.endif

我有這種結構的mysql表

mysql> show create table phpbb_bt_torrents\G
*************************** 1. row ***************************
      Table: phpbb_bt_torrents
Create Table: CREATE TABLE `phpbb_bt_torrents` (
`info_hash` char(20) CHARACTER SET cp1251 COLLATE cp1251_bin NOT NULL DEFAULT '',
) ENGINE=InnoDB AUTO_INCREMENT=128511 DEFAULT CHARSET=cp1251

我在晚上備份它mysqldump --quote-names --add-drop-table db>db.sql

mysql < db.sql 如果我在同一台伺服器上恢復備份,那麼我得到的數據並不完全相同,例如:

SELECT hex(info_hash) FROM phpbb_bt_torrents

8CB0701A0C8B7D976538 88 E8B959A6420AEC7679 恢復後變為 8CB0701A0C8B7D976538 3F E8B959A6420AEC7679

A9 98 6D2E961E1F407E74E9D18D811DDB702924F5 恢復後變為 A9 3F 6D2E961E1F407E74E9D18D811DDB702924F5

等等…我注意到只有 88h 和 98h 字元會損壞,但可能還有更多。

有沒有辦法備份和恢復數據而不會損壞?

我已經在Bugs.MySQL.com上打開了票

從那裡解決方法:

指定選項 –default-character-set=cp1251。但是這種解決方法不適用於具有混合字元集的測試案例

您可以嘗試使用“mysqldump –opt …”進行轉儲然後恢復它嗎?

在同一台伺服器上應該不會有什麼不同,只是為了確保這不是某些使用者特定的配置。

引用自:https://serverfault.com/questions/52014