实现同一台服务器不同数据库的单表同步
完整脚本
#!/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"
可以根据需求自行修改
使用方式
$ bash demo.sh <table_name>
遇到的问题及解决
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 <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"
报错及解决
尝试使用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@'%';
注意:process权限是一个全局权限,所以不可以指定在某一个库上,否则会报错
ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES