问题是这样,需要对mysql数据库中的一张表做备份操作,数据库在linux上,考虑用crontab对表定时备份,这张表是利用存储过程生成的,因此需要写一个shell脚本,调用mysql的这个存储过程,并且在shell中对生成的表做备份操作。
也不知道问题描述清楚了没,各位有没可以参考的脚本。
也不知道问题描述清楚了没,各位有没可以参考的脚本。
解决方案 »
- 各位大侠们 帮帮忙啊 mysql4.0 两个表更新问题
- 关于MYSQL数据库速度问题,请教高手
- 刚下载JDBC在mysql官网为什么没有中国国旗
- 获取mysql自动递增的主键
- mysql备份与恢复
- 求助:数据库连接成功,在执行update时出现错误:com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'id' at row 1
- 如何通过语句查询MySQL版本
- mysql5的触发器不支持层叠触发,有没有别的解决方法的?
- 求助:postgresql在Spring+Hibernate中使用时主键不能自动增长
- mysqli连接问题,连接时间不稳定,偶尔需要2s
- 如何用MySql的存储过程写sql语句?请高手指点
- linux数据库备份到win,网页中显示乱码(急)
具体可帮助mysql --help
然后
su - mysqluser mysql -uroot -p<password> <database> < yoursql.sql
把这个sh加到你的crontab任务里边
cd /usr/local/mysql/bin#declare parameter
today='date +%Y-%m-%d';
yesterday='date +%Y-%m-%d -d "1 day ago"';#call procedure
mysql -u root -p password dababase<<EOF
begin
exec P_CollectionDataBackup($today,$yesterday);
end;
EOF#backup
mysqldump -u root -p password dababase $yesterday > ../CollectionDataBackup/$yesterday.sql不知道这种写法正确不?
C:\MySQL\bin\mysqladmin -u root --password=123456 shutdown
C:\MySQL\bin\mysqldump --opt -u root --password=123456 bbs > D:\db_backup\bbs.sql
C:\MySQL\bin\mysqld-nt
将以上代码保存为backup_db.bat
然后使用Windows的“计划任务”定时执行该脚本即可。(例如:每天凌晨5点执行back_db.bat)
使用show processlist命令,可以看到多个state是locked状态。
用unlock tables 没什么作用,依然是locked状态。
如何解决?
我还没有做备份操作
实际情况是,我要备份的表需要用来存储从终端发送来的大量数据
每天的数据量在千万数量级,因此考虑在终端数据量较小时做数据备份操作,将前一天的数据导出到临时表进行备份操作。
数据从原始表中导出,写到临时表,再删除原始表中前一天的数据都是在存储过程中完成的
crontab中写入shell脚本就是做定时备份,备份工作在sh中完成
现在测试发现,我在终端发送数据时执行存储过程,执行完成后就出现了对原始数据表的相关操作被locked无法写入数据
现在问题是如果出现死锁,我服务器的缓存肯定会撑满,导致服务器down掉
只是再此执行了unlock tables
看了一下原始表的属性
show processlist 发现locked的state全部消失了
又可以写数据了
这死锁时间是不是忒长了点
实在不解
打字的功夫,刷新了一下后台,locked又出现了再unlock tables也没用
insert的同时,表被locked
insert完成后,locked状态消失
是不是再进行插入操作时表会自动锁上
如果出现了异常,一直处于locked状态,那服务器不是非常不稳定。
又没有什么好的方法,大家不吝赐教
如果是innodb的表,那么使用参数--single-transaction可以保持数据库的一致性,而锁表的时间很短。如果不是 innodb表,那么就要使用--lock-tables或者--lock-all-tables,这样在整个导出过程中加读锁,期间更新操作不能进行,当数据库比较大的时候需要注意。--lock-tables是按数据库加锁,不能保证全部数据库的一致性,--lock-all-tables是给所有数据库的所有表加锁。
此选项将打开所有会提高文件导出速度和创造一个可以更快导入的文件的选项。(个人推荐。如果没有使用--opt,MYSQLDUMP就会把整个结果集装载到内存中,然后导出。如果数据非常大就会导致导出失败。这个开关在默认情况下是启用的,如果不想启用它:--skip-opt来关闭它。)
Thank you!
引擎改为innodb,locked的问题解决了。
但是还是进行测试,要优化。
200分送上,不成敬意