MySQL复制数据库的办法非常多。针对不同的场景,选择相应的办法。
在可以停止写入,不用保证数据一致性,需要速度的情况下,可以通过物理复制的办法。以下给出脚本:
<代码> # !/bin/bash datadir=/数据/mysql 导出路径=/usr/地方/sbin:/usr/地方/bin:/usr/sbin:/usr/bin:/根/bin:/根/bin:/usr/地方/mysql/bin 使用(){ echo - e”用法:$ 0 db1 db2 \ nCopy db1到db2。db2 \ nNote:如果存在,删除和重新创建它。” 出口1 } 如果($ # - ne 2);然后使用;fi (- d $ {datadir}/2美元),,rm射频$ {datadir}//* 2美元 mysql——登录路径=恢复- e”数据库,如果存在下降2美元;创建数据库2美元;” 因为我在' ls 1 $ {datadir}/1美元/| grep .ibd | awk - f”。“{打印1美元}' ' 做 mysql——登录路径=恢复- e " create table 2美元。我喜欢1美元。我美元;ALTER TABLE 2美元。美元我丢弃表空间,冲表1美元。我出口美元;系统cp pf $ {datadir}/1/我美元。{ibd, cfg} $ {datadir}/2美元/;打开表;“ mysql——登录路径=恢复- e”设置foreign_key_checks=0; alter table 2美元。美元我导入表空间;分析表2。我美元;” 完成 rm射频$ {datadir}/* cfg 退出0 代码>
具体实现可以参阅官方文档。
其中实现很简单,但过程发现了一些有意思的东西。
开始的时候,脚本中并没有<代码> [- d $ {datadir}/$ 2],,rm射频$ {datadir}/2美元/* 代码>这一句。在第一次执行脚本没什么毛病。但是,当对源库修改后,再次执行,这个时候目标库锁定了。查看进程发现系统锁,错误日志提示孤儿表下降过程中遇到数据库。这是可能的,如果失去了“db2/t1.frm”。