User name "John" is usable, cannot create an anonymous actor for it. Run maintenance/cleanupUsersWithNoId.php to fix this situation.

Jmnote (토론 | 기여)님의 2019년 9월 28일 (토) 15:20 판 (→‎원인)

1 문제상황

root@localhost:/var/www/html# php maintenance/update.php 
MediaWiki 1.33.0 Updater

Your composer.lock file is up to date with current dependencies!
Going to run database updates for my_wiki
Depending on the size of your database this may take a while!
Abort with control-c in the next five seconds (skip this countdown with --quick) ...
... (생략)
... rev_id=534620
... rev_id=534720
... rev_id=534778
Completed migration, updated 509013 row(s) with 1532 new actor(s), 4044 error(s)
Beginning migration of archive.ar_user and archive.ar_user_text to archive.ar_actor
... ar_id=100
... ar_id=200
... ar_id=300
... ar_id=400
... ar_id=500
... ar_id=600
... ar_id=720
... ar_id=857
User name "UseModWiki Importer" is usable, cannot create an anonymous actor for it. Run maintenance/cleanupUsersWithNoId.php to fix this situation.

... ar_id=1009
... ar_id=1109
... ar_id=1210
... ar_id=1310
... ar_id=1441
... ar_id=1580
... ar_id=1719
... ar_id=1851
... ar_id=1951
... ar_id=2051
User name "Krinkle" is usable, cannot create an anonymous actor for it. Run maintenance/cleanupUsersWithNoId.php to fix this situation.

... ar_id=2409
User name "MSGJ" is usable, cannot create an anonymous actor for it. Run maintenance/cleanupUsersWithNoId.php to fix this situation.

... ar_id=2555
... ar_id=2697
... ar_id=2856
... ar_id=2978
... ar_id=3081
... ar_id=3186
... ar_id=3296
... ar_id=3439
... ar_id=3571
[8d17137f563bdccd4f30535b] [no req]   Wikimedia\Rdbms\DBQueryError from line 1587 of /var/www/html/includes/libs/rdbms/database/Database.php: A database query error has occurred. Did you forget to run your application's database schema updater after upgrading? 
Query: INSERT  INTO `actor` (actor_name) VALUES ('113.57.92.46'),('93.57.91.35'),('testuser'),('224.68.103.57')
Function: MigrateActors::addActorsForRows
Error: 1062 Duplicate entry 'testuser' for key 'actor_name' (testdb)

Backtrace:
#0 /var/www/html/includes/libs/rdbms/database/Database.php(1556): Wikimedia\Rdbms\Database->getQueryExceptionAndLog(string, integer, string, string)
#1 /var/www/html/includes/libs/rdbms/database/Database.php(1274): Wikimedia\Rdbms\Database->reportQueryError(string, integer, string, string, boolean)
#2 /var/www/html/includes/libs/rdbms/database/Database.php(2149): Wikimedia\Rdbms\Database->query(string, string)
#3 /var/www/html/maintenance/includes/MigrateActors.php(226): Wikimedia\Rdbms\Database->insert(string, array, string)
#4 /var/www/html/maintenance/includes/MigrateActors.php(306): MigrateActors->addActorsForRows(Wikimedia\Rdbms\DatabaseMysqli, string, array, array, integer)
#5 /var/www/html/maintenance/includes/MigrateActors.php(114): MigrateActors->migrate(string, array, string, string, string)
#6 /var/www/html/maintenance/Maintenance.php(1719): MigrateActors->doDBUpdates()
#7 /var/www/html/includes/installer/DatabaseUpdater.php(1318): LoggedUpdateMaintenance->execute()
#8 /var/www/html/includes/installer/DatabaseUpdater.php(489): DatabaseUpdater->migrateActors()
#9 /var/www/html/includes/installer/DatabaseUpdater.php(453): DatabaseUpdater->runUpdates(array, boolean)
#10 /var/www/html/maintenance/update.php(203): DatabaseUpdater->doUpdates(array)
#11 /var/www/html/maintenance/doMaintenance.php(96): UpdateMediaWiki->execute()
#12 /var/www/html/maintenance/update.php(266): require_once(string)
#13 {main}

2 원인

  • revision 테이블에는 있지만 user 테이블에는 없는 user_name가 문제가 된다.
  • 즉, revision 테이블에서 rev_user=0 이지만 rev_user_text가 IP주소가 아닌 경우이다.
  • 다음 쿼리로 목록을 확인할 수 있다.
SELECT DISTINCT rev_user_text FROM revision
WHERE rev_user=0 AND rev_user_text NOT REGEXP '^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}$'
MariaDB [my_wiki]> SELECT DISTINCT rev_user_text FROM revision WHERE rev_user=0 AND rev_user_text NOT REGEXP '^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}$';
+---------------------+
| rev_user_text       |
+---------------------+
| WOSlinker           |
| MediaWiki default   |
| UseModWiki Importer |
| MSGJ                |
| Krinkle             |
+---------------------+
5 rows in set (0.227 sec)

여러가지 조치방법이 있을 수 있는데, 아래와 같이 처리해보았다.

UPDATE revision SET rev_user_text='1.1.1.1' WHERE rev_user=0 AND rev_user_text='Alice';
UPDATE revision SET rev_user_text='1.1.1.2' WHERE rev_user=0 AND rev_user_text='Bob';
UPDATE revision SET rev_user_text='1.1.1.3' WHERE rev_user=0 AND rev_user_text='Carol';
UPDATE revision SET rev_user_text='1.1.1.4' WHERE rev_user=0 AND rev_user_text='David';
UPDATE revision SET rev_user_text='1.1.1.5' WHERE rev_user=0 AND rev_user_text='Erwin';

3 같이 보기

4 참고

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}