千家信息网

MySQL复制数据库

发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,MySQL复制数据库的办法非常多。针对不同的场景,选择相应的办法。在可以停止写入,不用保证数据一致性,需要速度的情况下,可以通过物理复制的办法。以下给出脚本:#!/bin/bashdatadir=/d
千家信息网最后更新 2025年01月22日MySQL复制数据库

MySQL复制数据库的办法非常多。针对不同的场景,选择相应的办法。
在可以停止写入,不用保证数据一致性,需要速度的情况下,可以通过物理复制的办法。以下给出脚本:

#!/bin/bashdatadir=/data/mysqlexport PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin:/usr/local/mysql/binusage(){echo -e "Usage: $0 db1 db2\nCopy db1 to db2.\nNote: if db2 exists,drop and recreate it."exit 1}if [ $# -ne 2 ]; then usage; fi[ -d ${datadir}/$2 ] && rm -rf ${datadir}/$2/*mysql --login-path=recover -e "drop database if exists $2;create database $2;"for i in `ls -1 ${datadir}/$1/ | grep .ibd | awk -F '.' '{print $1}'`domysql --login-path=recover -e "create table $2.$i like $1.$i;ALTER TABLE $2.$i DISCARD TABLESPACE;flush tables $1.$i for export;system cp -pf ${datadir}/$1/$i.{ibd,cfg} ${datadir}/$2/; unlock tables;" mysql --login-path=recover -e "set foreign_key_checks=0;alter table $2.$i import tablespace;analyze table $2.$i;" donerm -rf ${datadir}/*cfgexit 0

具体实现可以参阅官方文档。

其中实现很简单,但过程发现了一些有意思的东西。
开始的时候,脚本中并没有[ -d ${datadir}/$2 ] && rm -rf ${datadir}/$2/*这一句。在第一次执行脚本没什么毛病。但是,当对源库修改后,再次执行,这个时候目标库锁定了。查看进程发现System lock,错误日志提示Orphan table encountered during DROP DATABASE. This is possible if 'db2/t1.frm' was lost。


这个MySQL服务不能正常shutdown,通过kill掉进程重启。
重启服务过后,仍然不能删除目标库。需要删除目标库目录下的所有文件,可删除目标库。

以上问题在5.6系列会发生,5.7和8.0系列并无此问题。

目标 办法 脚本 数据 时候 进程 问题 服务 数据库 不同 一致 有意思 没什么 一致性 不用 东西 再次 可以通过 场景 官方 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 农产品残留基础数据库 网络安全公益大讲题心得体会 全国网络安全课讲师 做软件开发 还是销售 服务器硬盘灯亮 江西综合软件开发成本价 科技股和互联网有啥区别 苹果自带地图找不到服务器 趣味计算机网络技术 软件开发核定征收所得税吗 如何查询数据库实例信息 9.0死亡之翼还服务器 安广网络技术系统自评估 软件开发云创新中心招聘 松江区网络技术开发咨询介绍 护树庙 网络安全课 模拟城市服务器连接中断 怎么给数据库中单个空值赋值 王思聪专业服务器 将网站发布到服务器 金华企业网络安全准入控制哪家好 一个网络安全团队的发展历史 管理网络技术服务口碑推荐 四川蜀侠网络技术公司怎么样 服务器虚拟机系统作用 自考软件开发流程是 自学软件开发能找到工作吗 软件开发公司销售部门个人目标 人口基本信息数据库 纵联网络技术
0