使用mysqlfrm恢復frm表結構的方法


1、mysqlfrm安裝

由於mysqlfrm是mysql-utilities工具一部分,那么我們安裝mysql-utilities即可,下載好對應的源碼包,進行編譯安裝

shell> wget https://cdn.mysql.com/archives/mysql-utilities/mysql-utilities-1.6.5.tar.gz

shell> tar -xvzf mysql-utilities-1.6.4.tar.gz shell> cd mysql-utilities-1.6.4 shell> python ./setup.py build shell> python ./setup.py install

安裝完成后,在相應的python執行目錄下,就能mysqlfrm等執行文件了。

2、mysqlfrm相關參數介紹

--basedir :如 --basedir=/usr/local/percona-5.6.21

--server : 如 --server=user:password@192.168.1.100:3306

--diagnostic : 開啟按字節模式來恢復frm結構

--user :啟動MySQL用戶,通過為mysql

3、mysqlfrm使用

使用--basedir模式恢復:

[ 16:35:29-root@br3cy1sw:~ ]# mysqlfrm --basedir=/usr/local/percona-5.6.21/ /root/t1.frm --port=3434 --user=mysql --diagnostic

# WARNING The --port option is not used in the --diagnostic mode.

# WARNING: The --user option is only used for the default mode.

# WARNING: Cannot generate character set or collation names without the --server option.

# CAUTION: The diagnostic mode is a best-effort parse of the .frm file. As such, it may not identify all of the components of the table correctly. This is especially true for damaged files. It will also not read the default values for the columns and the resulting statement may not be syntactically correct.

# Reading .frm file for /root/t1.frm:

# The .frm file is a TABLE.

# CREATE TABLE Statement:

CREATE TABLE `root`.`t1` (

`a` int(11) NOT NULL,

`b` int(11) DEFAULT NULL,

`c` int(11) DEFAULT NULL,

`d` varchar(600) DEFAULT NULL,

PRIMARY KEY `PRIMARY` (`a`),

KEY `idx_t1_bc` (`b`,`c`)

) ENGINE=InnoDB;

    #...done.

使用--server方式恢復:

[ 16:35:10-root@br3cy1sw:~ ]#mysqlfrm --server=user:password@192.168.1.100:3306 /root/t1.frm --port=3434 --user=mysql --diagnostic

WARNING: Using a password on the command line interface can be insecure.

# WARNING The --port option is not used in the --diagnostic mode.

# WARNING: The --user option is only used for the default mode.

# Source on 192.168.1.100: ... connected.

# CAUTION: The diagnostic mode is a best-effort parse of the .frm file. As such, it may not identify all of the components of the table correctly. This is especially true for damaged files. It will also not read the default values for the columns and the resulting statement may not be syntactically correct.

# Reading .frm file for /root/t1.frm:

# The .frm file is a TABLE.

# CREATE TABLE Statement:

CREATE TABLE `root`.`t1` ( `a` int(11) NOT NULL, `b` int(11) DEFAULT NULL, `c` int(11) DEFAULT NULL,

`d` varchar(200) COLLATE `utf8_general_ci` DEFAULT NULL,

PRIMARY KEY `PRIMARY` (`a`),

KEY `idx_t1_bc` (`b`,`c`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    #...done.

注意到沒有,使用--basedir恢復出來的varchar竟然是--server模式的3倍;這應該是mysqlfrm在使用basedir模式時,無法進行字符編碼校驗所致引起的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM