如何在不使用SSH的情况下按需将实时MySQL数据库下载到本地测试数据库中?
我在没有SSH访问权限(仅具有FTP访问权限)的服务器上有一个很小的MySQL数据库(安装了Textpattern)。我需要根据需要定期将实时数据库下载到本地开发服务器。即,我想运行脚本和/或者运行cron作业。有什么好的方法可以做到这一点?
需要注意的几点:
- 实时服务器正在运行Linux,Apache 2.2,PHP 5.2和MySQL 4.1
- 本地服务器运行相同(因此可以选择使用PHP),但操作系统为Windows
- 本地服务器上装有Ruby(因此使用Ruby是有效的选择)
- 实时MySQL数据库可以接受来自不同IP的远程连接
- 我无法在远程服务器上启用复制
更新:我已经接受了BlaM的回答;这很简单。不敢相信我没有想到这一点。但是,有一个问题:我想自动化该过程,但是建议的解决方案会提示用户输入密码。这是传递密码的mysqldump命令的稍作修改的版本:
mysqldump -u USER --password = MYPASSWORD DATABASE_TO_DUMP -h主机> backup.sql
解决方案
回答
MySQL复制是一种选择吗?如果我们不希望它不断复制,甚至可以打开和关闭它。
这是一篇有关复制的好文章。
回答
我将创建一个(Ruby)脚本在服务器上的所有数据库上执行" SELECT * FROM ...",然后执行" DROP DATABASE ...",然后在本地执行一系列新的" INSERT"操作复制。我们可以执行" SHOW DATABASES"查询以动态列出数据库。现在,假设表结构不变,但是如果我们想支持表更改,则可以为每个数据库中的每个表添加一个" SHOW CREATE TABLE ..."查询和一个对应的" CREATE TABLE"语句。要获取数据库中所有表的列表,请执行" SHOW TABLES"查询。
获得脚本后,我们可以将其设置为计划作业,以根据需要运行。
回答
@马克·比克
Is MySQL replication an option? You could even turn it on and off if you didn't want it constantly replicating.
感谢建议,但是我无法在服务器上启用复制。这是一台共享服务器,几乎没有回旋余地。我已经更新了问题以注意这一点。
回答
根据我们需要复制实时数据的频率和执行速度的不同,可以选择在两台计算机上都安装phpMyAdmin。我们可以导出和导入数据库,但必须手动执行。如果它是一个小型数据库(听起来确实如此),并且我们不需要过多地复制实时数据,那么它可以很好地满足需求。
回答
由于可以远程访问数据库,因此可以从Windows计算机使用mysqldump来获取远程数据库。从命令行:
cd "into mysql directory" mysqldump -u USERNAME -p -h YOUR_HOST_IP DATABASE_TO_MIRROR >c:\backup\database.sql
该程序将要求我们提供数据库密码,然后生成一个文件c:\ backup \ database.sql,我们可以在Windows计算机上运行该文件以插入数据。
使用小型数据库,应该相当快。
回答
这是我用的。这会将数据库从实时服务器中转储,同时将其上传到本地服务器。mysqldump -hlive_server_addresss -ulive_server_user -plive_server_password --opt --compress live_server_db | mysql -ulocal_server_user -plocal_server_password local_server_db
我们可以从bat文件运行此文件。我们可以使用预定任务。