#!/bin/bash set -e useage() { echo "usage: $0 user passwd sql_path [infix] [host] [port] [login_db]" echo "user: 数据库用户名" echo "passwd: 数据库密码" echo "sql_path: 导入SQL文件路径" echo "infix: 数据库名中缀 默认:sql_path指定的SQL文件的数据库名" echo "host: 数据库IP地址 默认:${HOST}" echo "port: 数据库端口号 默认:${PORT}" echo "login_db: 登录服数据库 默认:${LOGIN_DB}" } # 执行SQL命令 excute() { CMD="mysql -u ${USER} -p${PASSWD} -h ${HOST} -P ${PORT} -v -e \"$1\"" echo "执行: ${CMD}" eval "${CMD}" } # 重建数据库 rebuild() { if [ "${DB_TYPE}" != "log" ]; then excute "DROP DATABASE IF EXISTS ${GAME_DB};" excute "CREATE DATABASE IF NOT EXISTS ${GAME_DB};" else excute "DROP DATABASE IF EXISTS ${LOG_DB};" excute "CREATE DATABASE IF NOT EXISTS ${LOG_DB};" fi } # 导入数据库 import_sql(){ if [ "${DB_TYPE}" != "log" ]; then ECUTE_DB=${GAME_DB} else ECUTE_DB=${LOG_DB} fi CMD="mysql -u ${USER} -p${PASSWD} -h ${HOST} -P ${PORT} ${ECUTE_DB} < ${SQL_PATH}" echo "执行: ${CMD}" eval "${CMD}" } # 插入玩家数据到登录数据库 insert_account(){ SQL="INSERT IGNORE INTO ${LOGIN_DB}.account_info SELECT CONCAT('0_', t.role_id), t.fn_name, '', t.register_time, 1, '#{}' FROM ${GAME_DB}.role t;" excute "${SQL}" } # 修改游戏服角色信息 update_role() { SQL="UPDATE ${GAME_DB}.role SET server_id=${SERVER_ID}, register_server_id=${SERVER_ID}, fn_platform=0;"; excute "${SQL}" } USER=$1 PASSWD=$2 SQL_PATH=$3 DB_TYPE=$4 if [ -z "${USER}" ] || [ -z "${PASSWD}" ] || [ -z "${SQL_PATH}" ]; then useage else INFIX=${5:-$(basename ${SQL_PATH} | cut -d_ -f3- | cut -d. -f1)} if [ -n "${INFIX}" ]; then HOST=${6:-localhost} PORT=${7:-3306} LOGIN_DB=${8:-ddxq_s900_trunk_login} GAME_DB=ddxq_${INFIX}_game LOG_DB=ddxq_${INFIX}_log SERVER_ID=$(echo ${INFIX} | grep -o -E '[0-9]+') echo "导入数据数据库: ${GAME_DB}" echo "服务器ID: ${SERVER_ID}" rebuild import_sql if [ "${DB_TYPE}" != "log" ]; then insert_account update_role fi echo "导入结束!" else echo "无法提取数据库中缀名,导入失败!" fi fi