1. 概要
 たまたま調べる機会がありましたので、備忘で・・・。
 本項は「MySQL の root パスワード忘れた時」を参考にさせていただきました。
2. 対処
 要はセーフモードで起動してパスワードを設定しなおすってことのようです。
 以下、やってみたプラットフォームは FreeBSD です。
 以下 root ユーザで
 サーバの停止
> service mysql-server stop
Stopping mysql.
Waiting for PIDS: 2059.
 セーフモードで起動
> /usr/local/bin/mysqld_safe --skip-grant-tables &
[1] 39613
2018-01-30T00:50:13.6NZ mysqld_safe Logging to '/var/db/mysql/vm.sing.ne.jp.err'.
2018-01-30T00:50:13.6NZ mysqld_safe Starting mysqld daemon with databases from /var/db/mysql
 MySQL に接続してパスワードを設定
> mysql -uroot
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.21-log Source distribution
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.
root@localhost [(none)]> use mysql
Database changed
 ここからのコマンドがバージョンによって変わってきます。
 5.6 以前は
UPDATE USER SET PASSWORD=PASSWORD("パスワード") WHERE USER='root';
FLUSH PRIVILEGES;
 でよかったらしいのですが、少なくともバージョン 5.7.21 では
UPDATE USER SET AUTHENTICATION_STRING=PASSWORD("パスワード") WHERE USER='root';
FLUSH PRIVILEGES;
 なのです。
 use mysql の続きでやってみます。
root@localhost [mysql]> UPDATE USER SET AUTHENTICATION_STRING=PASSWORD("パスワード") WHERE USER='root';
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 1
root@localhost [mysql]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
root@localhost [mysql]> quit
Bye
 MySQL を再起動します。
> service mysql-server restart
Stopping mysql.
Waiting for PIDS: 467812018-01-30T01:34:30.6NZ mysqld_safe mysqld from pid file /var/db/mysql/vm.sing.ne.jp.pid ended
.
Starting mysql.
[1]  + 終了                        /usr/local/bin/mysqld_safe --skip-grant-tables
 設定したパスワードで接続できるか確認してみます。
> mysql -u root -p
Enter password:			←	設定したパスワードを入力
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.21-log Source distribution
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.
root@localhost [(none)]>
 無事変更できたようです。