实现同一台服务器不同数据库的单表同步
完整脚本
#!/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