设为首页 加入收藏

TOP

MySQL复制数据库
2019-02-16 06:08:11 】 浏览:93
Tags:MySQL 复制 数据库
MySQL复制 数据库的办法非常多。针对不同的场景,选择相应的办法。

在可以停止写入,不用保证数据一致性,需要速度的情况下,可以通过物理复制的办法。以下给出脚本:

#!/bin/bash

datadir=/data/mysql

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin:/usr/local/mysql/bin

usage(){

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}'`

do

mysql --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;"

done

rm -rf ${datadir}/*cfg

exit 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复制数据库

MySQL复制数据库

这个MySQL服务不能正常shutdown,通过kill掉进程重启。

重启服务过后,仍然不能删除目标库。需要删除目标库目录下的所有文件,可删除目标库。

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

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇RAC安装需要额外注意的问题 下一篇ORA-1400抛弃expimp数据迁移

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目