您当前的位置: 首页 >  sql

彭世瑜

暂无认证

  • 2浏览

    0关注

    2791博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

彭世瑜 发布时间:2019-11-22 22:50:28 ,浏览量:2

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

完整脚本

#!/bin/bash

# 执行方式
# bash demo.sh 

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

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

# 接收参数 表名
table_name=$1

if [ ! $table_name ]; then  
    echo "error: 数据表名称未知"
    echo "执行方式: bash demo.sh "
    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"

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

$ bash demo.sh 
遇到的问题及解决
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)

解决方法:

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

参考 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 "
#     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 \
--user $source_user \
--password $source_password \
$source_database \
$table_name \
| mysql \
--host $target_host \
--port $target_port \
--user $target_user \
--password $target_password \
$target_database \
&& echo "同步完成 success"

报错及解决

尝试使用mysqldump导出数据报错:

mysqldump: Error: 'Access denied; 
you need (at least one of) the PROCESS privilege(s) for this operation' 
when trying to dump tablespaces

需要授权

> grant process on *.* to user@'%';

-- 刷新数据库
flush privileges;

注意:process权限是一个全局权限,所以不可以指定在某一个库上,否则会报错

ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES
关注
打赏
1665367115
查看更多评论
立即登录/注册

微信扫码登录

0.2591s