MyRocks_zh_doc

从InnoDB引擎迁移到MyRocks引擎

目前,fb-mysql支持一次只运行一个存储引擎。没有在线迁移框架来在存储引擎之间移动数据。 用户需要使用InnoDB从源MySQL服务器转储逻辑数据,并使用RocksDB引擎将其加载到目标MySQL服务器。 这可以通过诸如mysqldump之类的实用程序来实现。

该过程大致思路是:

* 将所有数据库和表模式从源复制到目标。尽可能切换到区分大小写的键。
* 使用"SELECT INTO OUTFILE"将每个表转储到一个文件
* 将文件发送到目标并使用"LOAD DATA INFILE"加载它们。

要加快目标库上的加载过程,建议使用如下选项:

* --sql_log_bin=0
* --foreign_key_checks=0
* --unique_checks=0
* --rocksdb_compaction_sequential_deletes=0
* --rocksdb_compaction_sequential_deletes_window=0
* --rocksdb_write_disable_wal=1
* --rocksdb_bulk_load=1
* --rocksdb_commit_in_the_middle=1
* --rocksdb_max_background_flushes=12
* --rocksdb_max_background_compactions=12
* --rocksdb_base_background_compactions=12

重要信息:上述选项在迁移方案中是安全的。建议不要在其他地方使用他们,因为这些选项会进行假设 例如批量加载主键排序,以及没有重复数据,有关详细信息。请参阅数据加载(四、性能调优/2.数据导入.md), 以及有关如何使用批量加载和使用快速二级索引创建的二级密钥大幅提高主键加载速度的重要信息(https://github.com/facebook/mysql-5.6/commit/5908823ef8ee4d49990dceb54864e88cf11b618f)。

将不区分大小写的(ci)键转换为区分大小写的(cs)键

MyRocks采用了“Mem Comparable”键。 mem可比较的关键是区分大小写的char / varchar密钥的性能优化。 它仅通过单个memcmp比较密钥,并避免比较涉及副本的密钥。作为副作用,不区分大小写的键效率较低。 MyRocks中不区分大小写的键具有以下缺点之一。

* 它存储额外的数据(存储原始数据和"可解码"数据),用于比较具有不区分大小写格式的键。
* 与辅助键一起使用时,无法执行仅索引扫描。

具有不区分大小写的键的表可以如下列出:

select c.table_name as 'tables with case insensitive keys' from information_schema.columns as c, information_schema.statistics as s 
where c.table_schema=DATABASE() 
and c.table_schema=s.table_schema 
and c.table_name=s.table_name 
and c.column_name=s.column_name 
and c.collation_name like '%ci' 
group by c.table_name 
order by c.table_name;

如果您的表很小并且很少访问,您可以将表保留为不区分大小写,因为此优化仅用于性能(和空间)。 你可以在my.cnf中明确地将这些表列入白名单,如下所示。

rocksdb_strict_collation_exceptions='t1,.*ci'

在这种情况下,表”t1”和所有以”ci”结尾的表都允许使用不区分大小写的键。 如您所见,rocksdb_strict_collat​​ion_exceptions变量支持正则表达式。