问一个mysql mysqldump 备份的问题

黄_瓜 2011-08-17 04:28:25
mysqldump -h192.168.1.123  -uroot -pdump_user -A  > test.sql

这个语句可以备份msyql的所有数据库

问题是现在我想怎么让备份的文件能分开,也就是每个数据库对应一个备份文件

我用的bat文件来定时备份的。

@echo off
SET "Ymd=%date:~,4%%date:~5,2%%date:~8,2%"
md "E:\Backup\Mysql\%Ymd%"
"F:\MySQL5.1\bin\mysqldump" -h192.168.1.123 -uroot -pwd -A > "E:\Backup\Mysql\%Ymd%\mysqldb_bak.sql"

pause


这个可以不可以把mysqldb改成一个变量,对应每个库名
当然也可以没数据库的写语句
我的库有点多,而且还在不断地增加,这样每次都得修改一下,会相对麻烦。
...全文
501 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
Alessandro_ 2011-08-23
  • 打赏
  • 举报
回复
学习学习。
luoyoumou 2011-08-18
  • 打赏
  • 举报
回复
-- Windows下自动备份所有数据库:

-- 假设我将每天的备份文件备份于 D:\mysql_bk\20110818 目录下(注:20110818是当天备份时的日期)

-- Step 1: 在 D:\mysql_bk 目录下创建一个 mysql_bk.sql 文件,其内容如下:

SELECT t.bk_sql
FROM (
SELECT concat('if exist "','D:\/mysql_bk\/',date_format(CURDATE(),'%Y%m%d'),
'" rmdir /s /q "D:\/mysql_bk\/',date_format(CURDATE(),'%Y%m%d'),'"') as bk_sql, 1 as cmd_order
UNION ALL
SELECT concat('md "','D:\/mysql_bk\/',date_format(CURDATE(),'%Y%m%d'),'"') as bk_sql, 2 as cmd_order
UNION ALL
SELECT concat('mysqldump -uroot -pyourpassword ',SCHEMA_NAME,' > ',
'"','D:\/mysql_bk\/',date_format(CURDATE(),'%Y%m%d'),
'\/',SCHEMA_NAME,'_',date_format(CURDATE(),'%Y%m%d'),'.sql','"') as bk_sql, 3 as cmd_order
FROM information_schema.SCHEMATA ) t
ORDER BY t.cmd_order asc
into outfile 'D:/mysql_bk/mysql_dump.bat';

-- Step 2: 在 D:\mysql_bk 目录下创建一个 mysql_bk.bat 文件,其内容如下:

if exist "D:\mysql_bk\mysql_dump.bat" del /s /q "D:\mysql_bk\mysql_dump.bat"

mysql -uroot -pyourpassword information_schema < D:\mysql_bk\mysql_bk.sql
call D:/mysql_bk/mysql_dump.bat /c /q

-- Step 3: 创建一个任务计划,每天凌晨 2:00 执行 mysql_bk.bat 文件即可

-- 注意:将 yourpassword 修改成你的数据库密码即可!

-- 感觉这种方法较你的方法更为灵活,因为你可以控制你的SQL语句,排除不需要备份的数据库!
luoyoumou 2011-08-18
  • 打赏
  • 举报
回复
-- Windows下自动备份所有数据库:

-- 假设我将每天的备份文件备份于 D:\mysql_bk\20110818 目录下(注:20110818是当天备份时的日期)

-- Step 1: 在 D:\mysql_bk 目录下创建一个 mysql_bk.sql 文件,其内容如下:

SELECT t.bk_sql
FROM (
SELECT concat('if exist "','D:\/mysql_bk\/',date_format(CURDATE(),'%Y%m%d'),
'" rmdir /s /q "D:\/mysql_bk\/',date_format(CURDATE(),'%Y%m%d'),'"') as bk_sql, 1 as cmd_order
UNION ALL
SELECT concat('md "','D:\/mysql_bk\/',date_format(CURDATE(),'%Y%m%d'),'"') as bk_sql, 2 as cmd_order
UNION ALL
SELECT concat('mysqldump -uroot -pgroupon1@3$ ',SCHEMA_NAME,' > ',
'"','D:\/mysql_bk\/',date_format(CURDATE(),'%Y%m%d'),
'\/',SCHEMA_NAME,'_',date_format(CURDATE(),'%Y%m%d'),'.sql','"') as bk_sql, 3 as cmd_order
FROM information_schema.SCHEMATA ) t
ORDER BY t.cmd_order asc
into outfile 'D:/mysql_bk/mysql_dump.bat';

-- Step 2: 在 D:\mysql_bk 目录下创建一个 mysql_bk.bat 文件,其内容如下:

if exist "D:\mysql_bk\mysql_dump.bat" del /s /q "D:\mysql_bk\mysql_dump.bat"

mysql -uroot -pgroupon1@3$ information_schema < D:\mysql_bk\mysql_bk.sql
call D:/mysql_bk/mysql_dump.bat /c /q

-- Step 3: 创建一个任务计划,每天凌晨 2:00 执行 mysql_bk.bat 文件即可
luoyoumou 2011-08-18
  • 打赏
  • 举报
回复
-- Windows下自动备份所有数据库:

-- 假设我将每天的备份文件备份于 D:\mysql_bk\20110818 目录下(注:20110818是当天备份时的日期)

-- Step 1: 在 D:\mysql_bk 目录下创建一个 mysql_bk.sql 文件,其内容如下:

SELECT t.bk_sql
FROM (
SELECT concat('if exist "','D:\/mysql_bk\/',date_format(CURDATE(),'%Y%m%d'),
'" rmdir /s /q "D:\/mysql_bk\/',date_format(CURDATE(),'%Y%m%d'),'"') as bk_sql, 1 as cmd_order
UNION ALL
SELECT concat('md "','D:\/mysql_bk\/',date_format(CURDATE(),'%Y%m%d'),'"') as bk_sql, 2 as cmd_order
UNION ALL
SELECT concat('mysqldump -uroot -pgroupon1@3$ ',SCHEMA_NAME,' > ',
'"','D:\/mysql_bk\/',date_format(CURDATE(),'%Y%m%d'),
'\/',SCHEMA_NAME,'_',date_format(CURDATE(),'%Y%m%d'),'.sql','"') as bk_sql, 3 as cmd_order
FROM information_schema.SCHEMATA ) t
ORDER BY t.cmd_order asc
into outfile 'D:/mysql_bk/mysql_dump.bat';

-- Step 2: 在 D:\mysql_bk 目录下创建一个 mysql_bk.bat 文件,其内容如下:

if exist "D:\mysql_bk\mysql_dump.bat" del /s /q "D:\mysql_bk\mysql_dump.bat"

mysql -uroot -pgroupon1@3$ information_schema < D:\mysql_bk\mysql_bk.sql
call D:/mysql_bk/mysql_dump.bat /c /q

-- Step 3: 创建一个任务计划,每天凌晨 2:00 执行 mysql_bk.bat 文件即可
nicenight 2011-08-17
  • 打赏
  • 举报
回复
在帮别人的时候自己也学到了不少,所以不用客气呢。
nicenight 2011-08-17
  • 打赏
  • 举报
回复
提示 More 应该是你的 Pause 的功能了吧 ~~

我想起来了,你是用在 bat 中,则需要把 %i 改为 %%i,这个是个特殊的地方,下面的语句我测试通过,你再把 do 后面的内容改掉就行了:

@echo off
echo 现在是 %DATE% %TIME%
echo.
echo MySQL数据库备份
echo *****************************
echo.
SET "Ymd=%date:~,4%%date:~5,2%%date:~8,2%"

for /f %%i in ('mysql -hIP -u用户 -p密码 -N -e "show databases";') do echo %%i

echo.
echo MySQL数据库备份完成,请进行检查。。。
echo.
echo.
pause
黄_瓜 2011-08-17
  • 打赏
  • 举报
回复
结贴,一点小分不成敬意。
黄_瓜 2011-08-17
  • 打赏
  • 举报
回复
哈哈,搞定了,太感谢仁兄了
黄_瓜 2011-08-17
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 nicenight 的回复:]
测试的时候,你不要直接双击 bat 文件,最好是在 cmd 窗口中调用你的 bat,这样如果有错误就会输出在窗口上了。

上述语句一个比较明显的错误是你的 do 另起一行了,它应该和 for 的 ) 号在一行的,你改了以后再用上述调试方法看看错误输出是什么。
[/Quote]
嗯,我也是突然想起来的在cmd窗口搞,是有了不少改动
现在提示 More?
这是什么意思
nicenight 2011-08-17
  • 打赏
  • 举报
回复
测试的时候,你不要直接双击 bat 文件,最好是在 cmd 窗口中调用你的 bat,这样如果有错误就会输出在窗口上了。

上述语句一个比较明显的错误是你的 do 另起一行了,它应该和 for 的 ) 号在一行的,你改了以后再用上述调试方法看看错误输出是什么。
黄_瓜 2011-08-17
  • 打赏
  • 举报
回复
兄台还在不了?帮忙测一下语法,没有写过dos命令。。
黄_瓜 2011-08-17
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 nicenight 的回复:]
引用 17 楼 beirut 的回复:

-N -e 是干什么的,呵呵


-N 不显示列名,否则的话,循环时要去掉第一个名字,那就是 show databases 所显示的“Database”
-e 是直接执行后续的命令

如下为对比:

不带 -N 参数:

SQL code


+--------------------+
| Database ……
[/Quote]
v5 学了不少东西,O(∩_∩)O哈哈~
300分奉上,在给指点一下。
黄_瓜 2011-08-17
  • 打赏
  • 举报
回复
@echo off
echo 现在是 %DATE% %TIME%
echo.
echo MySQL数据库备份
echo *****************************
echo.
SET "Ymd=%date:~,4%%date:~5,2%%date:~8,2%"
md "E:\Backup\Mysql\%Ymd%"

for /f %i in ('F:\APMServ5.2.6\MySQL5.1\bin\mysql -h192.57.20.101 -uroot -p123 -N -e " show databases";')
do F:\APMServ5.2.6\MySQL5.1\bin\mysqldump -h192.57.20.101 -uroot -p123 %i >"E:\Backup\Mysql\%Ymd%\%i.sql"

echo.
echo MySQL数据库备份完成,请进行检查。。。
echo.
echo.
pause


这个是我修改过得,貌似那里出了点问题,打开都直接关掉了
没有执行
nicenight 2011-08-17
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 beirut 的回复:]

-N -e 是干什么的,呵呵
[/Quote]

-N 不显示列名,否则的话,循环时要去掉第一个名字,那就是 show databases 所显示的“Database”
-e 是直接执行后续的命令

如下为对比:

不带 -N 参数:

+--------------------+
| Database |
+--------------------+
| information_schema |
+--------------------+


带 -N 参数:

+--------------------+
| information_schema |
+--------------------+
黄_瓜 2011-08-17
  • 打赏
  • 举报
回复
-N -e 是干什么的,呵呵
nicenight 2011-08-17
  • 打赏
  • 举报
回复
唉,记不住语法,现查的语法。
黄_瓜 2011-08-17
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 nicenight 的回复:]
又没有显示出来……

SQL code

for /f %i in ('mysql -u用户 -p密码 -hIP -N -e "show databases";') do mysqldump -u用户 -p密码 -hIP %i > %i.sql



这个就是 bat 语句,可以直接在 bat 中使用。
[/Quote]
犀利啊, 我研究下哈
lxq19851204 2011-08-17
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 nicenight 的回复:]
又没有显示出来……

SQL code
for /f %i in ('mysql -u用户 -p密码 -hIP -N -e "show databases";') do mysqldump -u用户 -p密码 -hIP %i > %i.sql



这个就是 bat 语句,可以直接在 bat 中使用。
[/Quote]
这个仁兄DOS功底比较强啊~~
nicenight 2011-08-17
  • 打赏
  • 举报
回复
说实在的,我更喜欢 bash,dos 下的 for 之类的用起来很复杂的样子。
nicenight 2011-08-17
  • 打赏
  • 举报
回复
又没有显示出来……
for /f %i in ('mysql -u用户 -p密码 -hIP -N -e "show databases";') do mysqldump -u用户 -p密码 -hIP %i > %i.sql



这个就是 bat 语句,可以直接在 bat 中使用。
加载更多回复(11)

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧