MySQL复制数据库

  

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”。
 MySQL复制数据库

  

 MySQL复制数据库”> <br/>这个MySQL服务不能正常关机,通过杀死掉进程重启。<br/>重启服务过后,仍然不能删除目标库。需要删除目标库目录下的所有文件,可删除目标库。</p>
  <p>以上问题在5.6系列会发生,5.7和8.0系列并无此问题。</p><h2 class=MySQL复制数据库