同步本地数据库和现场数据库
Synchronize local database and live site database
我有一个本地网站,用户每天在其中向 Mysql 数据库添加项目。现在我想制作网站的实时版本。
但是我不想将项目添加到两个数据库,而是只想添加到本地数据库。并同步远程数据库。
本地站点使用 XAMPP。我也不认为复制是我想要的方式。
我正在寻找更多的 PHP 方法来完成这项任务。
目前我不知道如何实现这一目标。
知道怎么做吗?
最快的方法是使用 MySQL,但如果您想严格使用 PHP,如果您只希望实时数据反映本地数据(即您可以删除所有数据并重新提取数据)。因为此解决方案在 PHP、 中,所以您将不得不遍历每个人 table。您可以 运行 一个使用 PDO 或 MySQLi 的 PHP 脚本,但您将需要下面列出的两种删除策略之一:
1) TRUNCATE
和 SELECT FROM
(速度快,但有 潜在的安全风险 )这是一个更大的风险,因为 MySQL 权限TRUNCATE
是 DROP
和 ALTER
。不是您希望普通数据库用户访问的命令。这是实现它的 SQL:
TRUNCATE live_database_name.table_name
INSERT INTO live_database_name.table_name SELECT * FROM local_database_name.table_name
2) DELETE FROM
和 SELECT FROM
(数据越多速度越慢,但更安全)。此解决方案较慢,因为您必须遍历 table 中的每个条目,而不是删除并重新创建 table。但是,DELETE
被视为给予数据库用户更安全的权限,因为他们不能 DROP
整个 table。以下是实现它所需的条件:
DELETE FROM live_database_name.table_name
INSERT INTO live_database_name.table_name SELECT * FROM local_database_name.table_name
如果您不想设置复制方案,为什么不只使用(2 个或 3 个)cron 作业,转储本地/转储远程/使用本地转储更新远程。不,这不是最好的方法,但它确实有效...
仅使用 (2),转储本地/使用本地转储更新远程,运行 每天@ 1:00AM 转储,以及 !:15AM 更新
0 1 * * * mysqldump --host="localhost" --user="user" --password="password" database_name > backup_name.sql
15 1 * * * mysql --host="remote_host" --user="user" --password="password" --port="3306" database_name < backup_name.sql
我有一个本地网站,用户每天在其中向 Mysql 数据库添加项目。现在我想制作网站的实时版本。
但是我不想将项目添加到两个数据库,而是只想添加到本地数据库。并同步远程数据库。
本地站点使用 XAMPP。我也不认为复制是我想要的方式。
我正在寻找更多的 PHP 方法来完成这项任务。
目前我不知道如何实现这一目标。
知道怎么做吗?
最快的方法是使用 MySQL,但如果您想严格使用 PHP,如果您只希望实时数据反映本地数据(即您可以删除所有数据并重新提取数据)。因为此解决方案在 PHP、 中,所以您将不得不遍历每个人 table。您可以 运行 一个使用 PDO 或 MySQLi 的 PHP 脚本,但您将需要下面列出的两种删除策略之一:
1) TRUNCATE
和 SELECT FROM
(速度快,但有 潜在的安全风险 )这是一个更大的风险,因为 MySQL 权限TRUNCATE
是 DROP
和 ALTER
。不是您希望普通数据库用户访问的命令。这是实现它的 SQL:
TRUNCATE live_database_name.table_name
INSERT INTO live_database_name.table_name SELECT * FROM local_database_name.table_name
2) DELETE FROM
和 SELECT FROM
(数据越多速度越慢,但更安全)。此解决方案较慢,因为您必须遍历 table 中的每个条目,而不是删除并重新创建 table。但是,DELETE
被视为给予数据库用户更安全的权限,因为他们不能 DROP
整个 table。以下是实现它所需的条件:
DELETE FROM live_database_name.table_name
INSERT INTO live_database_name.table_name SELECT * FROM local_database_name.table_name
如果您不想设置复制方案,为什么不只使用(2 个或 3 个)cron 作业,转储本地/转储远程/使用本地转储更新远程。不,这不是最好的方法,但它确实有效...
仅使用 (2),转储本地/使用本地转储更新远程,运行 每天@ 1:00AM 转储,以及 !:15AM 更新
0 1 * * * mysqldump --host="localhost" --user="user" --password="password" database_name > backup_name.sql
15 1 * * * mysql --host="remote_host" --user="user" --password="password" --port="3306" database_name < backup_name.sql