20211218093500_articles_copy.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. <?php
  2. /*
  3. 迁移 article 库
  4. 从旧数据表中提取数据插入到新的表
  5. 插入时用uuid判断是否曾经插入
  6. 曾经插入就不插入了
  7. */
  8. require_once __DIR__."/../../app/config.php";
  9. #user info
  10. $user_db=_FILE_DB_USERINFO_;#user数据库
  11. $user_table=_TABLE_USER_INFO_;#user表名
  12. #
  13. $src_db = _FILE_SRC_USER_ARTICLE_;#源数据库
  14. $src_table = _TABLE_SRC_ARTICLE_;#源表名
  15. $dest_db = _FILE_DB_USER_ARTICLE_;#目标数据库
  16. $dest_table = _TABLE_ARTICLE_;#目标表名
  17. fwrite(STDOUT,"migarate article".PHP_EOL);
  18. #打开user数据库
  19. $PDO_USER = new PDO($user_db,_DB_USERNAME_,_DB_PASSWORD_,array(PDO::ATTR_PERSISTENT=>true));
  20. $PDO_USER->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
  21. fwrite(STDOUT,"open user table".PHP_EOL);
  22. #打开源数据库
  23. $PDO_SRC = new PDO($src_db,_DB_USERNAME_,_DB_PASSWORD_,array(PDO::ATTR_PERSISTENT=>true));
  24. $PDO_SRC->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
  25. fwrite(STDOUT,"open src table".PHP_EOL);
  26. #打开目标数据库
  27. $PDO_DEST = new PDO($dest_db,_DB_USERNAME_,_DB_PASSWORD_,array(PDO::ATTR_PERSISTENT=>true));
  28. $PDO_DEST->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
  29. fwrite(STDOUT,"open dest table".PHP_EOL);
  30. $queryInsert = "INSERT INTO ".$dest_table."
  31. (
  32. uid,
  33. title,
  34. subtitle,
  35. summary,
  36. content,
  37. owner,
  38. owner_id,
  39. editor_id,
  40. setting,
  41. status,
  42. lang,
  43. create_time,
  44. modify_time,
  45. updated_at,
  46. created_at)
  47. VALUES ( ? , ? , ?, ? , ? ,? , ? , ? , ? , ? , ? , ?,? ,?,?)";
  48. $stmtDEST = $PDO_DEST->prepare($queryInsert);
  49. $commitData = [];
  50. $allInsertCount = 0;
  51. $allSrcCount = 0;
  52. $count = 0;
  53. #从user数据表中读取
  54. $query = "SELECT id FROM ".$user_table." WHERE userid = ? ";
  55. $stmtUser = $PDO_USER->prepare($query);
  56. #从源数据表中读取
  57. $query = "SELECT * FROM ".$src_table." WHERE true ";
  58. $stmtSrc = $PDO_SRC->prepare($query);
  59. $stmtSrc->execute();
  60. while($srcData = $stmtSrc->fetch(PDO::FETCH_ASSOC)){
  61. $allSrcCount++;
  62. $stmtUser->execute(array($srcData["owner"]));
  63. $userId = $stmtUser->fetch(PDO::FETCH_ASSOC);
  64. if(!$userId){
  65. fwrite(STDERR,time()."error,no user id {$srcData["owner"]}".PHP_EOL);
  66. continue;
  67. }
  68. if(strlen($srcData["owner"])>36){
  69. fwrite(STDERR,time().",error,user id too long {$srcData["owner"]}".PHP_EOL);
  70. continue;
  71. }
  72. //查询是否已经插入
  73. $queryExsit = "SELECT id FROM ".$dest_table." WHERE uid = ? ";
  74. $getExist = $PDO_DEST->prepare($queryExsit);
  75. $getExist->execute(array($srcData["id"]));
  76. $exist = $getExist->fetch(PDO::FETCH_ASSOC);
  77. if($exist){
  78. continue;
  79. }
  80. #插入目标表
  81. $created_at = date("Y-m-d H:i:s.",$srcData["create_time"]/1000).($srcData["create_time"]%1000)." UTC";
  82. $updated_at = date("Y-m-d H:i:s.",$srcData["modify_time"]/1000).($srcData["modify_time"]%1000)." UTC";
  83. $commitData = array(
  84. $srcData["id"],
  85. $srcData["title"],
  86. $srcData["subtitle"],
  87. $srcData["summary"],
  88. $srcData["content"],
  89. $srcData["owner"],
  90. $userId["id"],
  91. $userId["id"],
  92. $srcData["setting"],
  93. $srcData["status"],
  94. $srcData["lang"],
  95. $srcData["create_time"],
  96. $srcData["modify_time"],
  97. $created_at,
  98. $updated_at
  99. );
  100. $stmtDEST->execute($commitData);
  101. if (!$stmtDEST || ($stmtDEST && $stmtDEST->errorCode() != 0)) {
  102. $error = $PDO_DEST->errorInfo();
  103. echo "error - $error[2] ";
  104. exit;
  105. }
  106. $count++;
  107. $allInsertCount++;
  108. if($count ==10000){
  109. #10000行输出log 一次
  110. echo "finished $count".PHP_EOL;
  111. $count=0;
  112. }
  113. }
  114. fwrite(STDOUT,"insert done $allInsertCount in $allSrcCount ".PHP_EOL) ;
  115. fwrite(STDOUT,"all done".PHP_EOL);