前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >shell脚本实现mysql传输表空间

shell脚本实现mysql传输表空间

原创
作者头像
wangwei-dba
修改2021-05-12 18:14:06
1.3K0
修改2021-05-12 18:14:06
举报
文章被收录于专栏:mysql-dbamysql-dba

由于项目需要快速备份表所以就使用mysql Transportable Tablespaces(mysql传输表空间)来实现表快速数据的迁移,如下就用shell脚本自动化了表数据迁移在不同服务器的mysql实例间传输

使用传输表空间前提: 1.要开启独立表空间innodb_file_per_table

2.源实例和目标实例表空间页大小要一致(innodb_page_size

3.如果表有外键关系,在执行DISCARD TABLESPACE之前必须禁用foreign_key_checks。此外您应该在相同的逻辑时间点导出所有与外键相关的表

4.mysql实例要具有相同GA版本

脚本使用需要安装sshpass

yum -y install sshpass

配置说明

#源实例信息配置
shost=192.168.37.219  #源实例ip
sport=3306  #源实例端口
suser=root  #源实例用户名
spassword=xxxx@123edc #源实例密码
sdatadir=/data/mysql/mysql3306/data/  #源实例数据文件目录
smysql_path=/usr/local/mysql/bin/mysql #源实例mysql指令位置

#目标实例信息配置
dhost=192.168.169.40  #目标实例ip
dport=3306  #目标实例端口
duser=root  #目标实例用户
dpassword=xxxx@123edc #目标实例密码
ddatadir=/data/mysql/mysql3306/data/ #目标实例数据文件目录
dmysql_path=/usr/local/mysql/bin/mysql #目标实例mysql指令位置

#目标服务器配置sshpass拷贝文件
host='192.168.169.40' #目标服务器ip
sshport='22'    #ssh端口
hostuser='root' #服务器用户名
hostpassword='xxxx@www23@'  #服务器密码

脚本使用:

./tran_tab.sh -t table_name -d db_xx -s db_xx

-t表示迁移的表名字

-d是迁移的目标库

-s是迁移的源库

vi tran_tab.sh
#!/bin/bash
#*************************************************************************
#  Author       :               wangwei
#  CreateDate   :               2020-09-27
#  Description  :               this script using the Transportable Tablespaces
#                               archive move data 
#
#*************************************************************************
#!/bin/bash

Usage() {
cat << EOF
tran_tab
OPTIONS:
   -t    table name
   -d    destination instance db
   -s    source instance db
For secrity: This scripts check the full need arguments
EOF
}
while getopts ":t:d:s:" opt; do
  case $opt in
    t)
      stab_name=${OPTARG}
      ;;
    d)
      ddbname=${OPTARG}
      ;;
    s)
      sdbname=${OPTARG}
      ;;
    \?)
      echo "Invalid option: -$OPTARG" >&2
      exit 1
      ;;
    :)
      echo "Option -$OPTARG requires an argument." >&2
      Usage
      exit 1
      ;;
  esac
done
if [ $# != 6 ] ; then
    Usage
    exit 1;
fi

#echo $stab_name >> 1.txt
#echo $ddbname >> 1.txt
#echo $sdbname >> 1.txt
 
#源实例信息配置
shost=192.168.37.219
sport=3306
suser=root
spassword=xxxx@123edc
sdatadir=/data/mysql/mysql3306/data/
smysql_path=/usr/local/mysql/bin/mysql

#目标实例信息配置
dhost=192.168.169.40
dport=3306
duser=root
dpassword=xxxx@123edc
ddatadir=/data/mysql/mysql3306/data/
dmysql_path=/usr/local/mysql/bin/mysql

#目标服务器配置sshpass拷贝文件
host='192.168.169.40'
sshport='22'
hostuser='root'
hostpassword='xxxx@www23@'

#获取表的创建脚本
$smysql_path -h$shost -P$sport -u$suser -p$spassword --skip-column-names $sdbname -e "show create table $stab_name \G" >./.$stab_name.sql
sed -i '1,2d' ./.$stab_name.sql
sed -i '$a ;' ./.$stab_name.sql
#在目标实例上创建表
strsql=`cat ./.$stab_name.sql`
echo $strsql
$dmysql_path -h$dhost -P$dport -u$duser -p$dpassword $ddbname -e "$strsql"

#On the destination instance, discard the tablespace
$dmysql_path -h$dhost -P$dport -u$duser -p$dpassword $ddbname -e "ALTER TABLE $stab_name DISCARD TABLESPACE;"

#On the source instance, run FLUSH TABLES ... FOR EXPORT 
$smysql_path -h$shost -P$sport -u$suser -p$spassword $sdbname -e "FLUSH TABLES $stab_name FOR EXPORT;select sleep(30)" &

#Copy the .ibd file and .cfg metadata file from the source instance to the destination instance
sshpass -p $hostpassword scp -P$sshport -o StrictHostKeyChecking=no $sdatadir/$sdbname/$stab_name.{cfg,ibd} $hostuser@$host:$ddatadir/$ddbname/

#修改文件权限
sshpass -p $hostpassword ssh -p$sshport $hostuser@$host "chown mysql:mysql -R $ddatadir/$ddbname/$stab_name.{ibd,cfg}"

#On the source instance, use UNLOCK TABLES to release the locks
$smysql_path -h$shost -P$sport -u$suser -p$spassword $sdbname -e "UNLOCK TABLES;"

#On the destination instance, import the tablespace:
$dmysql_path -h$dhost -P$dport -u$duser -p$dpassword $ddbname -e "ALTER TABLE $stab_name IMPORT TABLESPACE;"

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档