wordpress admin 계정 복구
문제
블로그 보는 거 자체는 문제가 없는데 admin 계정으로 로그인 시도하면 반복해서 로그인 페이지로 redirect됨
http://sosa0sa.com/wp-login.php?redirect_to=http://sosa0sa.com/wp-admin/&reauth=1
구글링을 하니 대부분 쿠키를 초기화하고, theme, plugin등을 초기화하라는 의견이 대부분. 모두 따라해 봤으니 제대로 동작하지 않는다… -_-
;;;
마지막으로 wp_usermeta table에서 session_token 값을 초기화하라는 말이 있어 이것도 해 보기로. phpmyadmin
을 설치해서 table의 값을 변경하라고 해서 phpmyadmin
을 역시 docker로 설치해 보기로
https://wordpress.org/support/topic/possible-fix-for-sudden-redirect-loop-at-wp-login-with-reauth1/
Phpmyadmin docker 설치
Wordpress ansible-playbook 에 다음과 같이 추가
links를 통해 mysql container와 연결하고 PMA_HOST를 해당 mysql container의 name으로 지정하는 것이 중요한 내용임. 처음에는 PMA_HOST를 “localhost”나 “127.0.0.1”로 지정하니 정상적으로 mysql에 로그인이 되지 않음
- name: Start phpmyadmin
docker_container:
name: phpmyadmin
image: phpmyadmin/phpmyadmin
links:
- mysql:mysql
# always pull the latest image
pull: no
state: started
recreate: yes
restart_policy: "always"
ports:
- "8181:80"
env:
PMA_HOST: "mysql"
MYSQL_USERNAME: "root"
MYSQL_ROOT_PASSWORD: "root_password"
그런데 mysql로 접속했는데 mysql의 DB 내용이 정상적으로 나오지 않음. 그런데 phpmyadmin 을 설치한 후 주소(http://192.168.1.200:8181)를 접근하니 예전에 본것과 다르게 뭔가 허전한 화면만 나온다.
아는 것도 없지만 그래도 혹시나 하고 docker에 bash로 접근해서 얼마전에 influxDB
에서 사용해 본 명령어가 같을 듯 해서 입력해 봤는데 이것도 제대로 동작하지 않는다.
mini2:~ cychong$ docker exec -it a7681c4ec35e bash
root@a7681c4ec35e:/# mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
root@a7681c4ec35e:/# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 39
Server version: 8.0.11 MySQL Community Server - GPL
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
ERROR 1449 (HY000): The user specified as a definer ('mysql.infoschema'@'localhost') does not exist
web으로 다시 phpmyadmin 화면에 접근했을 때 나온 에러 메시지를 찾아보기로 바로 이거
The user specified as a definer ('mysql.infoschema'@'localhost') does not exist
구글링을 하니 역시나 흔한 문제인 듯. 다음과 같은 글을 찾을 수 있어 글에서 시킨대로 해봤다.
암호는 container 생성할 때 인자로 넣어주는 MYSQL_ROOT_PASSWORD
값을 사용한다. wordpress.yaml 파일에서 확인 가능..
root@a7681c4ec35e:/var/log# mysql_upgrade -u root -p
Enter password:
Checking if update is needed.
Checking server version.
Running queries to upgrade MySQL server.
Upgrading system table data.
Checking system database.
mysql.columns_priv OK
mysql.component OK
mysql.db OK
mysql.default_roles OK
mysql.engine_cost OK
mysql.func OK
mysql.general_log OK
mysql.global_grants OK
mysql.gtid_executed OK
mysql.help_category OK
mysql.help_keyword OK
mysql.help_relation OK
mysql.help_topic OK
mysql.innodb_index_stats OK
mysql.innodb_table_stats OK
mysql.ndb_binlog_index OK
mysql.password_history OK
mysql.plugin OK
mysql.procs_priv OK
mysql.proxies_priv OK
mysql.role_edges OK
mysql.server_cost OK
mysql.servers OK
mysql.slave_master_info OK
mysql.slave_relay_log_info OK
mysql.slave_worker_info OK
mysql.slow_log OK
mysql.tables_priv OK
mysql.time_zone OK
mysql.time_zone_leap_second OK
mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.user OK
Found outdated sys schema version 1.5.1.
Upgrading the sys schema.
Checking databases.
sys.sys_config OK
wordpress_db.wp_commentmeta OK
wordpress_db.wp_comments OK
wordpress_db.wp_links OK
wordpress_db.wp_options OK
wordpress_db.wp_postmeta OK
wordpress_db.wp_posts OK
wordpress_db.wp_term_relationships OK
wordpress_db.wp_term_taxonomy OK
wordpress_db.wp_termmeta OK
wordpress_db.wp_terms OK
wordpress_db.wp_usermeta OK
wordpress_db.wp_users OK
Upgrade process completed successfully.
Checking if update is needed.
root@a7681c4ec35e:/var/log#
이제 다시 phpmyadmin
화면을 접근하니 이제 정상적인(?) 뭔가가 보인다.
뭔가 제대로 되는 것 같다. 다시 wordpress admin 계정으로 로그인하니 이젠 된다!!! Finally…
그래도 안될때
(2019.02.28) wordpress가 5.1로 업데이트 되어 그걸 적용했더니 database 파일도 업그레이드를 해야 한다고. 그래서 해라
그랬더니 또 로그인이 안된다. 이번에는 위의 mysql_upgrade
명령을 써도 안되고….
다행히 구글링에서 유용한 정보를 찾았다. 처음 본 순간 왠지 잘 될 것 같았는데 정말로 한번에 문제를 해결해줬다. https://www.fixrunner.com/cannot-login-wordpress-admin-area/
한 줄 요약하면 mysql database에 저장되어 있는 로그인 암호를 직접 변경하는 것.
wordpress database에서 wp_user
라는 테이블의 user_pass
라는 필드를 변경하는 거다.
phpmyadmin으로 수정하는 창에서 보니 결국(?) 이런 sql 명령으로 변경할 수 있다고 한다.
아래 새 암호
에 원하는 새로운 암호를 넣으면 그걸 md5 hash한 값을 user_pass
필드에 저장한다.
UPDATE `wp_users` SET `user_pass` = MD5('새 암호') WHERE `wp_users`.`ID` = 1;
다행히 오랫동안 헤매지 않고 해결해서 다행이다.