项目上有个需求,需要从外网服务器的MYSQL同步到本地服务器上。
思路如下:
1 在外网MYSQL中创建表 table_change_log ,记录表中数据的更改记录。
DROP TABLE IF EXISTS `table_change_log`; CREATE TABLE `table_change_log` ( `id` int(11) NOT NULL AUTO_INCREMENT, `table_name` varchar(20) NOT NULL DEFAULT '' COMMENT '表名', `table_op` varchar(20) NOT NULL DEFAULT '' COMMENT '操作', `table_id` int(11) NOT NULL DEFAULT '0' COMMENT '表ID', `add_time` datetime NOT NULL COMMENT '添加时间', PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8 COMMENT='表操作记录';
2 在外网MYSQL需要同步的表中,添加触发器(添加时、修改时、删除时)
DROP TRIGGER IF EXISTS `tg_{0}_insert`; CREATE TRIGGER `tg_{0}_insert` AFTER INSERT ON `{0}` FOR EACH ROW INSERT INTO table_change_log (`table_name`, `table_op`, `table_id`, `add_time`) VALUES('{0}', 'insert', new.id, now()); DROP TRIGGER IF EXISTS `tg_{0}_update`; CREATE TRIGGER `tg_{0}_update` AFTER UPDATE ON `{0}` FOR EACH ROW INSERT INTO table_change_log (`table_name`, `table_op`, `table_id`, `add_time`) VALUES('{0}', 'update', old.id, now()); DROP TRIGGER IF EXISTS `tg_{0}_delete`; CREATE TRIGGER `tg_{0}_delete` AFTER DELETE ON `{0}` FOR EACH ROW INSERT INTO table_change_log (`table_name`, `table_op`, `table_id`, `add_time`) VALUES('{0}', 'delete', old.id, now());
3 本地服务器从外网拉取同步的PHP代码并执行。
$url="http://xxx.xxx/sync/client.php"; $html = file_get_contents($url); if ($html === FALSE) { exit("NET ERROR!"); } file_put_contents("sync_exe.php", $html); include "sync_exe.php";
4 获取外网的更改记录,更新到本地服务器MYSQL中。
源码下载:https://files.cnblogs.com/files/zjfree/PHP_MYSQL_sync.rar
欢迎转载,转载请注明:转载自[ http://www.cnblogs.com/zjfree/ ]