1、简述
在MySQL迁移过程中,经常需要对数据库的信息进行检查,并将业务代码切换到新的MySQL实例。
以下总结的内容主要包含数据库在迁移过程中可能遇到的常见问题,并附带解决方法。
2、数据库
2.1、安装部分
2.1.1、版本
确认版本信息
select version();
2.1.2、字符集
确认字符集信息
show global variables like 'character%';
2.1.3、SQL 模式
确认 sql_mode 模式是否相同
show global variables like 'sql_mode';
2.1.4、只读
确认只读信息
show variables like 'read_only';
2.1.5、检查内存
检查内存使用量
select @@innodb_buffer_pool_size/1024/1024/1024;
2.2、数据同步
2.2.1、数据一致性检查
pt-table-checksum 工具测试,确认同步实例主从间数据一致
使用 dsn 连接主从(前提:先创建可访问的账号并授权)
# 主库 创建 dsns 表
CREATE TABLE `dsns` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`parent_id` int(11) DEFAULT NULL,
`dsn` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
);
# 插入从库连接信息
INSERT INTO `dsns` (`dsn`) VALUES
('h=10.10.10.8,u=dba,p=password,P=3306'),
('h=10.10.10.9,u=dba,p=password,P=3307');
# 运行同步检查
nohup /bin/pt-table-checksum \
--nocheck-replication-filters \
--no-check-binlog-format \
--replicate=pt.checksums \
--create-replicate-table \
--databases=$DATABASE_NAME \
--recursion-method=dsn=D=pt,t=dsns \
h=$HOST,u=$USER,p=$PASS,P=$PORT \
>>/tmp/pt-table-checksum.log 2>&1 &
#校验结束后,在每个从库上,执行如下的sql语句即可看到是否有主从不一致发生:
select * from checksums where master_cnt <> this_cnt OR master_crc <> this_crc OR
ISNULL(master_crc) <> ISNULL(this_crc) \G
2.2.2、迁移定时任务
确认定时任务是否同步迁移
crontab -l
2.2.3、迁移备份
确认备份是否迁移,检查主库和从库上的定时备份
crontab -l
3、程序
3.1、获取 IP
获取所有连接 MySQL 的 IP 地址
项目地址: https://github.com/40t/go-sniffer
工具存在一些问题可以按这个方法修复:https://blog.csdn.net/weixin_45385457/article/details/142874653
# 下载工具
wget http://url/go-sniffer.gz
# 解压
gunzip go-sniffer.gz
# 授权
chmod +x go-sniffer
# 定时任务监控数据库网络连接(多网卡可开启多个定时任务)
*/30 * * * * /bin/timeout 120 /root/go-sniffer em1 mysql -p 3309 | grep '# Start new stream:' >>/tmp/sniffer_em1.txt
# 获取连接信息
awk '{print $5}' /tmp/sniffer_em1.txt |sort -n|uniq -c |sort -nr
3.2、访问测试
确认代码服务器可访问 目标MySQL,找开发要所有代码服务器的地址,登录代码服务器并使用工具测试连接和权限信息
项目地址:https://gitee.com/hh688/conn-check
# 下载工具
wget https://gitee.com/hh688/conn-check/releases/download/v5.7/conn-check_5.4.0.linux-amd64.tar.gz
# 解压
tar xf conn-check_5.4.0.linux-amd64.tar.gz
# 执行工具测试(根据实际情况修改连接)
./conn-check mysql -h host -P 3306 -u <用户> -p <密码>
# 测试无法连接时,根据提示信息开通端口并创建账号
3.3、确认权限
确认代码服务器数据库用户权限正确
# 查看权限
show grants for user@host;