【1.2】mysql迁移实践及注意事项

【1】需求

数据迁移,2个库迁移到新的实例上去;

思路:

  按道理直接 mysqldump 导入导出就好了啊;

  但实际上还有许多要考虑的事情;

【2】迁移步骤

【2.1】导出

(1)字符集与引擎问题

select table_schema,table_name,TABLE_COLLATION,ENGINE 
from information_schema.tables 
where table_schema='webshop' ;

(2)mysqldump 参数问题

mysqldump -uroot -p --set-gtid-purged=OFF --single-transaction --flush-privileges  \
--master-data=2 --flush-logs --triggers --routines --events --hex-blob --lock-tables \
--max_allowed_packet=67108864 --B webshop > webshop_`date +%Y%m%d`.sql

1)GTID问题:--set-gtid-purged=OFF     2)binlog问题:--master-data=2

3)MYISAM引擎问题:--lock-tables   4)字符集问题:--default-character-set=utf8  ,这个要根据 (1) 中的情况对应导入导出

5)是否有drop database ifexists:-B 这个要注意看导出的文件,一般没有,但也怕有些版本会出现这个,把现有数据库删掉那就尴尬了;

【2.2】还原、导入

mysql --default-character-set=latin1  quanqingsanguo < test_latin_20210713.sql  
mysql --default-character-set=utf8  quanqingsanguo < test_utf8_20210713.sql  

还原也要注意字符集,根据导出的sql 文件字符集,导入时也要指定字符集,这样才能最大限度的保障数据一致性和字符集一致性

 

【3】迁移后核验

(3.1)迁移后表行数对比

注意修改条件 table_name in ...

echo 'create database test if not exists;'>>checktable.sql
echo 'drop table if exists test.table_info;'>>checktable.sql
echo 'create table test.table_info(table_schmea varchar(100),table_name varchar(100),rows int);'>>checktable.sql
mysql -e "select concat('insert into test.table_info select ''',table_schema,''',''',table_name,''',count(*) as rows from ',table_schema,'.',table_name,';') from information_schema.tables \
where table_name in ('player','player_bag','player_attribute','player_hero','player_login_info','pay_order') ; " -N >> checktable.sql
mysql < checktable.sql

(3.2)一致性对比

使用 pt-checksum

详细文档:https://www.cnblogs.com/gered/p/12882447.html

 

posted @ 2021-07-14 16:03  郭大侠1  阅读(205)  评论(0编辑  收藏  举报