docker-composeでMySQLのrootパスワードを忘れた場合に自分が行った対処のメモです。
###権限なしでmysqlコンテナを起動する
パスワードをリセットするためには権限テーブルを非参照で起動する必要があります。下記のオプションをdocker-compose.ymlに追加。
command: mysqld --skip-grant-tables --skip-networking
docker-compose.yml
mysql:
build:
context: ./mysql
args:
- MYSQL_VERSION=${MYSQL_VERSION}
environment:
- MYSQL_DATABASE=${MYSQL_DATABASE}
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- TZ=${WORKSPACE_TIMEZONE}
command: mysqld --skip-grant-tables --skip-networking
volumes:
- ${DATA_PATH_HOST}/mysql:/var/lib/mysql
- ${MYSQL_ENTRYPOINT_INITDB}:/docker-entrypoint-initdb.d
ports:
- "${MYSQL_PORT}:3306"
networks:
- backend
コンテナを再起動し、変更を反映させます。
>docker-compose stop mysql
>docker-compose up -d mysql
###パスワード変更
mysqlコンテナに入る
>docker-compose exec mysql bash
パスワードなしでログインできるようになる
mysql> mysql -u root
ユーザ名、ホスト名を確認
mysql> use mysql;
mysql> SELECT user, host FROM user;
パスワードを変更
mysql> SET PASSWORD FOR ユーザ名@ホスト名 = 'パスワード';
最後にcommand: mysqld --skip-grant-tables --skip-networkingをdocker-compose.ymlから削除し、再起動すれば完了。