shell脚本使用mysqldump+mysql同步线上库和测试库数据

举报
彭世瑜 发表于 2021/08/14 00:19:00 2021/08/14
【摘要】 实现同一台服务器不同数据库的单表同步 完整脚本 #!/bin/bash # 执行方式 # bash demo.sh <table_name> # 配置数据库账号密码 username='root' password='123456' # 配置数据源库 和 数据目标库 source_database='data' target_database='d...

实现同一台服务器不同数据库的单表同步

完整脚本

#!/bin/bash

# 执行方式
# bash demo.sh <table_name>

# 配置数据库账号密码
username='root'
password='123456'

# 配置数据源库 和 数据目标库
source_database='data'
target_database='dev_data'

# 接收参数 表名
table_name=$1

if [ ! $table_name ]; then echo "error: 数据表名称未知" echo "执行方式: bash demo.sh <table_name>" exit
fi echo "开始同步..."
echo "$source_database.$table_name => $target_database.$table_name"

# 2>/dev/null 可以抑制警告信息
mysqldump -u"${username}" -p"${password}"  $source_database $table_name 2>/dev/null \
| mysql -u"${username}" -p"${password}" $target_database 2>/dev/null \
&& echo "同步完成 success"


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

可以根据需求自行修改
使用方式

$ bash demo.sh <table_name>

  
 
  • 1

遇到的问题及解决

mysqldump: Couldn't execute '
SELECT COLUMN_NAME, JSON_EXTRACT(HISTOGRAM, '$."number-of-buckets-specified"')  
FROM information_schema.COLUMN_STATISTICS
WHERE SCHEMA_NAME = 'admin_xlmstore_c' AND TABLE_NAME = 'tb_article';': 
Unknown table 'COLUMN_STATISTICS' in information_schema (1109)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

解决方法:

# 添加参数 --column-statistics=0
mysqldump --column-statistics=0 -h ip -u root -p dbname > db.sql;

  
 
  • 1
  • 2

参考
mysqldump 导出提示Couldn’t execute SELECT COLUMN_NAME…

同步不同主机数据

#!/bin/bash

# 执行方式
# bash sync_data.sh [table_name]

####################################################
# 参数配置
####################################################

# 数据源
source_host='127.0.0.1'
source_port='3306'
source_user='root'
source_password='123456'
source_database='data'

# 数据目标
target_host='127.0.0.1'
target_port='3306'
target_user='root'
target_password='123456'
target_database='data_dev'

# 可选接收参数 表名
table_name=$1

# if [ ! $table_name ]; then
# echo "error: 数据表名称未知"
# echo "执行方式: bash demo.sh <table_name>"
# exit
# fi


####################################################
# 脚本执行
####################################################

echo "开始同步..."
echo "$source_database.$table_name => $target_database.$table_name"

# 2>/dev/null 可以抑制警告信息
mysqldump \
--column-statistics=0 \
--host "${source_host}" \
--port "${source_port}" \
-u"${source_user}" \
-p"${source_password}" \
$source_database \
$table_name \
| mysql \
--host "${target_host}" \
--port "${target_port}" \
-u"${target_user}" \
-p"${target_password}" \
$target_database \
&& echo "同步完成 success"


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57

文章来源: pengshiyu.blog.csdn.net,作者:彭世瑜,版权归原作者所有,如需转载,请联系作者。

原文链接:pengshiyu.blog.csdn.net/article/details/103208622

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。