首页 > 数据库 >用通配符批量同步MySQL部分数据表

用通配符批量同步MySQL部分数据表

时间:2022-10-06 17:32:18浏览次数:48  
标签:www bianjicms 通配符 数据表 92formyz innodb ikanchai MySQL net


作者:田逸(formyz)

接到一个任务,需要对一个数据量比较大的MySQL数据库的部分数据表做主从复制,其中有51个表的表明前缀相同(如下图所示),还有几个没有规律的表也需要一起同步。


用通配符批量同步MySQL部分数据表_初始化

用通配符批量同步MySQL部分数据表_初始化_02



要实现MySQL主从同步,需要先导出一份源数据库的备份。可用的方法有两种:mysqldump 与 xtrabackup。


在确定源数据库的版本后(5.6.50),目标系统安装好与之匹配的MySQL版本(不高于MySQL 8),设置好选项文件/etc/my.cnf(如下表所列),初始化数据库以后,确保从数据库MySQL服务可正常启动。​

root@k8s-165:~# more /etc/my.cnf

[client]​

port = 3306​

socket = /tmp/mysql.sock​


[mysqld]​


datadir=/data1/mysql_db​

socket=/tmp/mysql.sock​

log-error=/data1/mysql_db/error.log​

pid-file=/data1/mysql_db/mysqld.pid​

#skip-grant-tables​

slave-skip-errors=1236,1032,1062​

skip-name_resolve​

max-connect-errors=100000​

max-cnotallow=500​


# need for slave​

server-id = 165​

binlog-format = MIXED​

gtid-mode = on​

enforce-gtid-consistency = true​

log-bin = mysql-bin​

relay-log = mysql-relay-bin​

log-slave-updates=1​

replicate-wild-do-table = bianjicms.www_92formyz_net_ikanchai_recordbxc_*​

replicate-do-table = bianjicms.www_92formyz_net_ikanchai_smscode​

replicate-do-table = bianjicms.www_92formyz_net_ikanchai_levelgrowth​

replicate-do-table = bianjicms.www_92formyz_net_ikanchai_levelgrowthlog​

replicate-do-table = bianjicms.www_92formyz_net_ikanchai_member​

replicate-do-table = bianjicms.www_92formyz_net_ikanchai_wallet​

replicate-do-table = bianjicms.www_92formyz_net_ikanchai_bi​

replicate-do-table = bianjicms.www_92formyz_net_ikanchai_biconfig​

replicate-do-table = bianjicms.www_92formyz_net_ikanchai_rmb_record​




innodb_checksum_algorithm=innodb​

innodb_data_file_path=ibdata1:200M:autoextend​

innodb_log_files_in_group=2​

innodb_log_buffer_size=8388608​

innodb_page_size=16384​

innodb_undo_directory=.​

innodb_undo_tablespaces=0​


innodb_buffer_pool_size=50G​

innodb_log_file_size=2G​

innodb_flush_method=O_DIRECT​

innodb_io_capacity=2000​

innodb_io_capacity_max=6000​

innodb_lru_scan_depth=2000​



请注意,MySQL选项文件my.cnf支持通配符。这样节省了大量的手工输入,也降低了出错几率!!!


试图尝试主库(源数据库)使用工具mysqldump导出这些需要同步的数据表,但其本身不支持直接使用通配符,需要用间接的办法实现,又加上其它几个没有命名规律的数据表,用这个工具导出有一定的难度,只能放弃,而选用xtrabackup。


xtrabackup直接支持通配符,其选项形式为“--include=”。再结合选项“--tables-file”,把其余没有规律的数据表写到一个文本文件,xtrabackup带这两个选项就可以省事不少。手动创建文本文件tables.txt,其完整内容如下:​

bianjicms.www_92formyz_net_ikanchai_smscode​

bianjicms.www_92formyz_net_ikanchai_levelgrowth​

bianjicms.www_92formyz_net_ikanchai_levelgrowthlog​

bianjicms.www_92formyz_net_ikanchai_member​

bianjicms.www_92formyz_net_ikanchai_wallet​

bianjicms.www_92formyz_net_ikanchai_bi​

bianjicms.www_92formyz_net_ikanchai_biconfig​

bianjicms.www_92formyz_net_ikanchai_rmb_record

其中“bianjicms”为数据库名。


在保证主数据库所在系统有足够的存储空间以后,执行如下指令将指定的数据库表导出到目录“/mnt/backup”。

innobackupex --tables-file=/root/tables.txt --include=bianjicms/www_92formyz_net_ikanchai_recordbxc* --user=root --password=H37%s6Pl2 /mnt/backup


如果一切顺利,执行完毕后会有“221006 13:57:20 completed OK!”类似这样的输出。继续在主库所在的系统执行下列指令为恢复数据准备。

xtrabackup --prepare --target-dir=/mnt/backup/2022-10-06_12-47-00


一切准备妥当以后,将数据库备份目录以NFS的方式共享给数据库从库(目标库)所在的系统,省掉数据复制这个步骤,从而节省时间。


备库系统也安装好与主库相一致的xtrabackup软件,并将已经初始化生成数据文件的目录清理干净,本案的数据目录为 /data1/mysql_db,如果不清空,xtrabckup恢复数据库时将不能正常执行。清理完从库数据库目录的文件后,执行如下指令进行备份文件的恢复。

xtrabackup --copy-back --target-dir=/mnt/backup/2022-10-06_12-47-00 --datadir=/data1/mysql_db


数据恢复完毕后,启动从数据库。启动可能失败,提示没有系统表等错误。造成这个错误的原因是由于没有把主库的mysql等系统库级数据表同步过来所致。解决办法就是再执行一次MySQL数据库初始化操作,这个操作不会对已经用xtrabackup恢复的数据产生任何影响,可大胆操作。


再进行从数据库MySQL服务启动,就应该正常了。登录从数据库MySQL客户端,执行如下指令进行数据库主从同步。

mysql > change master to master_host='172.16.88.123',master_user='root',master_password=' H37%s6Pl2”;

mysql > slave start;


因为主库与从库都启用了GTID,因此无需再输入主库二进制日志文件名(master_log_file)以及日志偏移量(master_log_pos)。


继续在mysql客户端执行指令 show slave status\G 验证同步的正确性及状态。


用通配符批量同步MySQL部分数据表_mysql_03

用通配符批量同步MySQL部分数据表_mysql_04


标签:www,bianjicms,通配符,数据表,92formyz,innodb,ikanchai,MySQL,net
From: https://blog.51cto.com/sery/5733937

相关文章

  • 带你5分钟读懂MySQL字符集
    前言在日常开发中经常遇到“乱码”问题,很有可能就是因为对字符集的理解不到位、设置错误造成的,本文主要总结一下MySQL字符集的相关知识,以及如何设置字符集,希望对大家有所帮......
  • 【MySQL系列】- 浅析undo log
    undolog是什么undolog可以称为撤销日志、undo日志,它记录着事务回滚前的数据。官方定义:Astorageareathatholdscopiesofdatamodifiedbyactivetransactions.翻......
  • MySQL存储引擎详解(一)-InnoDB架构
    前言目前MySQL8.x版本数据库已经支持了很多存储引擎了,但是一般我们常用的就几种,容易形成思维固化不会轻易采取其他存储引擎,从而错失很多优化存储的功能。因此对现支持的九种......
  • MySQL 基础语法
    SELECT基础用法SELECTname,ageFROMuserDISTINCT——对检索结果去重应用于所有列而不仅是它后面的一列,所有列的值都不同才会被认为不同。SELECTDISTI......
  • MySQL索引底层:B+树详解
    前言当我们发现SQL执行很慢的时候,自然而然想到的就是加索引。对于范围查询,索引的底层结构就是B+树。今天我们一起来学习一下B+树哈~公众号:「捡田螺的小男孩」树简介、树种类......
  • MySQL面试题(二)
    11、列对比运算符是什么?在SELECT 语句 的列比较中使用=,<>,<=,<,>=,>,<<,>>,<=>,AND,&nbs***bsp;或 LIKE 运算符。12、  BLOB 和 TEXT 有什么区别?BLOB 是一个二进......
  • ERROR! The server quit without updating PID file (/home/mysql/data/VM-0-13-cento
    服务器中是已经安装了mysql数据库的,但是运行过程中,显示服务不存在了,查看了日志less-n VM-0-13-centos.err显示  尝试修改配置innodb_buffer_pool_size=64M......
  • 使用docker安装mysql数据库并数据挂载
    下面是关于:单机版的mysql安装部署+数据挂载。1、首先安装docker,以及docer的基本配置包括镜像加速等,相关教程前面有讲过,可以参考docker安装部署和卸载_咛果果的博客-......
  • mysql count函数
    1.count(1)andcount(字段)两者的主要区别是(1) count(1) 会统计表中的所有的记录数,包含字段为null 的记录。(2) count(字段) 会统计该字段在表中出现的次数,忽略字段......
  • linux下mysql常见错误(2003,1045)
    ‘2003错误’然后连接navicat会报1045,解决方法如下: 附加MySQL在linux下的大小写敏感问题解决方法: ......