linux下自动执行sql文件

本文介绍了一种在 Linux 环境下利用 MySQL 5.0 的定时任务实现与他人数据库同步的方法,通过创建接口获取 SQL 文件,并在特定时间执行同步操作。

最近在项目中遇到 定时去和别人数据库同步
解决方案:第三提供一个接口,接口返回一个sql文件 把这个文件在我们数据库里面执行
环境:linux mysql5.0

解决问题关键:
1 获取sql文件 在mysql端执行
2 定时(每天一次)去同步

import.sh文件 内容如下:



#自己随便建的个目录
cd /appcom/com/jindie/load
#去下载文件 并且把下载文件重命名文件 横线大写字母O  因为这个接口返回的是默认 "pingan.do?opt=downloadDb"这个名字的文件
wget -O pingan$(date +%Y%m%d).tar.gz  -b -t 0  http://xxx.xxx.xxx/pingan/pingan.do?opt=downloadDb
#休眠5秒因为下面命令要依赖上个命令生成的文件
sleep 5
#解压文件
gunzip pingan$(date +%Y%m%d).tar.gz
sleep 3
#解压文件
tar -xvf pingan$(date +%Y%m%d).tar
#把目录赋值给一个变量
FOLDER_A=/appcom/com/jindie/load
FOLDER_B=/appcom/com/jindie/bak
#获得目录下的所有sql文件
for file_a in ${FOLDER_A}/*.sql; do
#输出显示sql文件
    echo "----" ${file_a}
    cp $file_a $FOLDER_B/ 
done
#进入mysql的bin目录 如果不进入 直接执行mysql 可能找不到命令
cd /appcom/com/mysql/bin
#连接数据 -u用户名 -p密码 -h主机号 -P 端口号 数据库 <要执行的sql文件的全路径  用上面定义的变量
./mysql  -uroot  -h127.0.0.1 -P3306 pingan < ${file_a}



cd /appcom/com/jindie/load
wget -O pingan$(date +%Y%m%d).tar.gz  -b -t 0  http://xxx.xxx.xxx/pingan/pingan.do?opt=downloadDb
sleep 5
gunzip pingan$(date +%Y%m%d).tar.gz
sleep 3
tar -xvf pingan$(date +%Y%m%d).tar
FOLDER_A=/appcom/com/jindie/load
FOLDER_B=/appcom/com/jindie/bak
for file_a in ${FOLDER_A}/*.sql; do
    echo "----" ${file_a}
    cp $file_a $FOLDER_B/ 
done
cd /appcom/com/mysql/bin
./mysql  -uroot  -h127.0.0.1 -P3306 pingan < ${file_a}



定时执行:
命令行下执行 crontab -e  可能提示没有权限 提示:
You (appcom ) are not allowed to use this program (crontab)
See crontab(1) for more information

 那么切换root用户  su root 密码

crontab -e 进入编辑状态

30 3 * * 6 sh /root/bin/tarlog.sh 2>&1 >>/root/tarlog.sh.out
53 2 * * * sh /root/bin/osbackup.sh 2>&1 >>/root/osbackup.sh.out
16 20 * * * sh /appcom/com/jindie/import.sh 2>&1 >>/appcom/com/jindie/import.sh.out
*/5 8-21 * * 1-5 /bin/bash /root/bin/cpu_mem_collect.sh 2>&1 > /dev/null


加入红色字体行

意思是:每天晚上八点十六分 定时执行import.sh命令 执行输出到import.sh.out
至于时间的定义 请参考别处

### 在 Linux 环境下通过命令行执行 SQL 文件的方法 在 Linux 环境下,可以通过多种方式使用命令行执行 SQL 文件。以下是几种常见的方法及其详细说明: #### 方法一:直接通过 MySQL 命令执行 SQL 文件 可以使用 `mysql` 命令直接执行 SQL 文件,并将输出重定向到日志文件中。命令格式如下: ```bash mysql -u用户名 -p密码 -D数据库 < 【sql脚本文件路径全名】 > 记录报错日志路径 ``` 例如: ```bash mysql -uroot -p123456 -Dliuliang < /root/update.sql > /root/log.txt ``` 此方法适用于 MySQL 数据库环境,并且可以在 Windows 和 Linux 平台上使用[^1]。 #### 方法二:使用 `source` 命令法 如果已经登录到 MySQL 数据库的交互式命令行界面,可以使用 `source` 命令来执行 SQL 文件。假设 SQL 文件位于 `/home/user/sqlfile.sql`,操作步骤如下: 1. 登录 MySQL 数据库: ```bash mysql -u用户名 -p ``` 2. 在 MySQL 提示符下运行以下命令: ```sql source /home/user/sqlfile.sql; ``` 此方法简单直观,适合在交互式会话中执行 SQL 脚本[^3]。 #### 方法三:使用管道符调用 SQL 文件 可以直接通过管道符将 SQL 文件的内容传递给 MySQL 命令。例如: ```bash mysql -uroot -p123456 < /root/temp.sql ``` 此方法不需要显式登录到 MySQL 交互式界面,适合自动化脚本或批处理任务[^2]。 #### 方法四:PostgreSQL 数据库中的 SQL 文件执行 对于 PostgreSQL 数据库,可以使用 `psql` 命令执行 SQL 文件。命令格式如下: ```bash psql -U 用户名 -d 数据库名 -f sql脚本文件路径 ``` 例如: ```bash psql -U postgres -d mydatabase -f /path/to/script.sql ``` 此外,还可以在 PostgreSQL 的交互式会话中使用 `\i` 命令加载并执行 SQL 文件。例如: ```sql \i /path/to/script.sql; ``` 此方法适用于 PostgreSQL 数据库环境[^4]。 ### 注意事项 - 在执行 SQL 文件时,请确保文件路径正确,并且用户具有足够的权限访问该文件。 - 如果需要记录执行过程中的错误信息,可以将标准错误输出重定向到日志文件中。例如: ```bash mysql -uroot -p123456 -Dliuliang < /root/update.sql > /root/log.txt 2>&1 ``` ### 示例代码 以下是一个完整的示例,展示如何在 Linux 下通过命令行执行 SQL 文件: ```bash # 方法一:直接执行 SQL 文件 mysql -uroot -p123456 -Dtestdb < /home/user/script.sql > /home/user/log.txt 2>&1 # 方法二:使用 source 命令 mysql -uroot -p123456 -Dtestdb source /home/user/script.sql; # 方法三:使用管道符 mysql -uroot -p123456 < /home/user/script.sql # 方法四:PostgreSQL 执行 SQL 文件 psql -U postgres -d testdb -f /home/user/script.sql ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值