20211214181900_user_operation_log_copy.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. <?php
  2. /*
  3. 迁移 sentence pr 库
  4. 从旧数据表中提取数据插入到新的表
  5. 插入时用uuid判断是否曾经插入
  6. 曾经插入就不插入了
  7. */
  8. require_once __DIR__."/../../app/config.php";
  9. $active_type[10] = "channel_update";
  10. $active_type[11] = "channel_create";
  11. $active_type[20] = "article_update";
  12. $active_type[21] = "article_create";
  13. $active_type[30] = "dict_lookup";
  14. $active_type[40] = "term_update";
  15. $active_type[42] = "term_create";
  16. $active_type[41] = "term_lookup";
  17. $active_type[60] = "wbw_update";
  18. $active_type[61] = "wbw_create";
  19. $active_type[70] = "sent_update";
  20. $active_type[71] = "sent_create";
  21. $active_type[80] = "collection_update";
  22. $active_type[81] = "collection_create";
  23. $active_type[90] = "nissaya_open";
  24. #user info
  25. $user_db=_FILE_DB_USERINFO_;#user数据库
  26. $user_table=_TABLE_USER_INFO_;#user表名
  27. # 更新索引表
  28. $src_db=_FILE_SRC_USER_ACTIVE_LOG_;#源数据库
  29. $src_table=_TABLE_SRC_USER_OPERATION_LOG_;#源表名
  30. $dest_db=_FILE_DB_USER_ACTIVE_LOG_;#目标数据库
  31. $dest_table=_TABLE_USER_OPERATION_LOG_;#目标表名
  32. fwrite(STDOUT,"migarate user opration log".PHP_EOL);
  33. #打开user数据库
  34. $PDO_USER = new PDO($user_db,_DB_USERNAME_,_DB_PASSWORD_,array(PDO::ATTR_PERSISTENT=>true));
  35. $PDO_USER->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
  36. fwrite(STDOUT,"open user table".PHP_EOL);
  37. #打开源数据库
  38. $PDO_SRC = new PDO($src_db,_DB_USERNAME_,_DB_PASSWORD_,array(PDO::ATTR_PERSISTENT=>true));
  39. $PDO_SRC->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
  40. fwrite(STDOUT,"open src table".PHP_EOL);
  41. #打开目标数据库
  42. $PDO_DEST = new PDO($dest_db,_DB_USERNAME_,_DB_PASSWORD_,array(PDO::ATTR_PERSISTENT=>true));
  43. $PDO_DEST->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
  44. fwrite(STDOUT,"open dest table".PHP_EOL);
  45. #删除源数据表中全部数据
  46. fwrite(STDOUT,"delete dest".PHP_EOL);
  47. $query = "delete from $dest_table where true;";
  48. $stmtDest = $PDO_DEST->prepare($query);
  49. $stmtDest->execute();
  50. $queryInsert = "INSERT INTO ".$dest_table."
  51. (
  52. user_id,
  53. op_type_id,
  54. op_type,
  55. content,
  56. timezone,
  57. create_time,
  58. created_at)
  59. VALUES ( ? , ? , ? , ? ,? , ? , to_timestamp(?))";
  60. $stmtDEST = $PDO_DEST->prepare($queryInsert);
  61. $commitData = [];
  62. $allInsertCount = 0;
  63. $allSrcCount = 0;
  64. $count = 0;
  65. #从user数据表中读取
  66. $query = "SELECT id FROM ".$user_table." WHERE userid = ? ";
  67. $stmtUser = $PDO_USER->prepare($query);
  68. #从源数据表中读取
  69. $query = "SELECT * FROM ".$src_table." WHERE true ";
  70. $stmtSrc = $PDO_SRC->prepare($query);
  71. $stmtSrc->execute();
  72. while($srcData = $stmtSrc->fetch(PDO::FETCH_ASSOC)){
  73. $allSrcCount++;
  74. #插入目标表
  75. $commitData = array(
  76. $srcData["user_id"],
  77. $srcData["active"],
  78. $active_type[$srcData["active"]],
  79. $srcData["content"],
  80. $srcData["timezone"],
  81. $srcData["time"],
  82. $srcData["time"]/1000
  83. );
  84. $stmtDEST->execute($commitData);
  85. if (!$stmtDEST || ($stmtDEST && $stmtDEST->errorCode() != 0)) {
  86. $error = $PDO_DEST->errorInfo();
  87. echo "error - $error[2] ";
  88. exit;
  89. }
  90. $count++;
  91. $allInsertCount++;
  92. if($count ==10000){
  93. #10000行插入一次
  94. echo "finished $count".PHP_EOL;
  95. $count=0;
  96. }
  97. }
  98. fwrite(STDOUT,"insert done $allInsertCount in $allSrcCount ".PHP_EOL) ;
  99. fwrite(STDOUT,"all done".PHP_EOL);