
ERROR 2002 (HY000)〜エラーが立て続いたのでMariaDBを入れ直すことにした
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)上記のエラーでMariaDBにログインできなくなってしまったので、アンインストールし再度インストールすることにした。エラーの原因はハッキリとはしていないが、複数サーバーに同じ仕様のMariaDBをインストールし、各々DBの中身の一部分だけは個別に弄ろうということをしていた時にこのエラーに遭遇した。
心当たりがあるとするならば、複数サーバーのDBアカウントを用意し、それらIDとパスワードは各々個別に割り振っていた。これは妥当な作業なのだが、どこかでその複数サーバー間でIDパスワードがテレコになってしまったようで、作成したアカウントでログインできないならば直ぐにテレコと気づけば良いものの、モジュールをアンインストールしたり再度インストールし直したりとしているうちに、現在のエラーに行き着き立ち往生となってしまったのだ。
なお、これから当該作業を行う上で、DBの中身がテストデータなど検証用ではなく、作業進捗や本番環境自体に影響を与えるならば、スナップショットやsqldumpなどでバックアップをとっておいたほうが良いでしょう。
今回のミッションは、
- MariaDBアンインストール
- MariaDB再インストール
- MariaDB初期設定
- ログインユーザー作成
- 作成したユーザーでログイン
上記5つをクリアしていきたいと思います。
開発環境
1 アンインストール作業開始
「purge」コマンドを用いて完全削除を行います。
$ sudo apt-get remove --purge mysql-server* mysql-common下記のエラーが出たため一旦止まりました。
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
default-mysql-client : Depends: mysql-client-8.0 but it is not going to be installed
N: Ignoring file 'mariadb.list.old_1' in directory '/etc/apt/sources.list.d/' as it has an invalid filename extension
E: Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.まずnoticeの方から、/etc/apt/sources.list.d/mariadb.list.old_1を無効な拡張子だから無視するということですが、一旦MariaDBに関連するものは削除しておきたいので削除してしまいます。
$ sudo rm /etc/apt/sources.list.d/mariadb.list.old_1次に下記のエラー。
E: Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.壊れたパッケージを見つける必要がありそうです。こちらは下記のコマンドで詳細を調べます。
$ sudo dpkg --auditThe following packages are only half configured, probably due to problems
configuring them the first time. The configuration should be retried using
dpkg --configure or the configure menu option in dselect:
phpmyadmin MySQL web administration tool phpmyadminが中途半端な状態ということなので、下記コマンドで削除してしまいます。これは先ほど、エラーが出て止まった影響にもあると思われます。
$ sudo apt-get purge phpmyadmin
これでおそらく下記のコマンドを打ったとしてもエラーは出力されなくなります。念のため確認してみてください。
$ sudo dpkg --auditどうでしょうか。私はエラーは出力されなくなりました。
MySQL関連削除
$ sudo apt-get remove --purge mysql-server* mysql-common
$ sudo apt-get autoremove --purge
$ sudo rm -r /etc/mysql
$ sudo rm -r /var/lib/mysqlMariaDB関連削除
$ sudo apt purge mariadb-server
$ sudo apt autoremove
$ sudo apt clean片っ端から削除する場合
上述した削除に加え、さらに探し出して手動削除する場合は「grep」で調べあげます。
$ dpkg -l | grep mysql$ dpkg -l | grep mariadb2 再インストール作業開始
下記コマンドでMariaDBを再インストールします。
$ sudo apt update
$ sudo apt install mariadb-server mariadb-client下記のエラーが出ました。
Warning: The unit file, source configuration file or drop-ins of mariadb.service changed on disk. Run 'systemctl daemon-reload' to reload units.上記の daemon-reload は、Unitファイルの変更を読み込むため、下記コマンドを実行し再度インストールコマンドを入力実行します。
$ sudo systemctl daemon-reload$ sudo apt install mariadb-server mariadb-client
エラーはなくなりました。
$ mysql --versionmysql Ver 15.1 Distrib 10.5.16-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2うまくいったようですね。
MariaDBのインストールについては下記を参考にすると良いと思われます。
Ubuntu 20.04にMariaDBをインストールする方法
3 mysql_secure_installationセキュリティスクリプトを実行しサーバアクセスを制限
MariaDB初期設定を進めていきます。まずは下記のセキュリティスクリプトを実行。
$ sudo mysql_secure_installation下記のように現在のデータベースrootパスワードを入力するように求められる。セットアップがまだ1つ残っているので、ENTERキーを押して「none」を示す。
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.
Enter current password for root (enter for none):次に、データベースrootパスワードをセットアップするかどうかが尋ねられる。
上述したリンク先を参考にすると、Ubuntuでは、MariaDBのrootアカウントが自動システムメンテナンスと密接に結び付けられているため、そのアカウント用に設定された認証方法を変更してはいけない。変更するとパッケージアップデートにより、管理アカウントへのアクセスが削除され、データベースシステムが破損される可能性がある。下記のようにNと入力してから、ENTERを押します。
OK, successfully used password, moving on...
Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.
You already have your root account protected, so you can safely answer 'n'.
Switch to unix_socket authentication [Y/n] Nパスワードを変更するので、Yと入力してから、ENTERを押します。
Change the root password? [Y/n] y新しいパスワードを入力し、ENTERを押します。さらに確認のために再度同じパスワードを入力し、ENTERを押します。
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] Y上記のように「デフォルトでは、MariaDBのインストールには匿名ユーザーがあり、誰でもユーザーアカウントを作成することなくMariaDBにログインすることができるようになっています。これはテスト用で、インストールを少しスムーズにするためだけです。本番環境に移行する前に削除しておく必要があります。」とのことなので、匿名ユーザーを削除故に、Yと入力してから、ENTERを押します。
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] Y上記のように「通常、rootは『localhost』からの接続しか許可されないはずです。 これは ネットワークからrootのパスワードを推測されないようにするためです。」とのことなので、rootでリモートログインできてしまうのはセキュリティ的に良くない故に、Yと入力してから、ENTERを押します。
By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] Y上記のように「デフォルトでは、MariaDBには誰でもアクセスできる’test’という名前のデータベースが付属しています。という名前のデータベースが付属しており、誰でもアクセスすることができます。 これもテスト用なので、本番環境に移行する前に 本番環境に移行する前に削除する必要があります。」とのことなので、テストデータベース削除のため、Yと入力してから、ENTERを押します。
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] Y上記のように「権限テーブルを再ロードすることで、これまでに行われたすべての変更が即座に反映され直ちに有効になります。」とのことなので、直ちに反映させるため、Yと入力してから、ENTERを押します。
... 成功!
後片付け中...
すべて完了です! 上記の手順がすべて完了したなら、MariaDB
のインストールは安全になっているはずです。
MariaDBを使用していただきありがとうございます。いえいえこちらこそ💦
MariaDB様いつもお世話になっております💦
と最後にディスプレイ画面へ深々とお辞儀をしたら完了です。
4 rootではないMariaDBユーザーを作成する
まず前述したパスワード設定時のパスワードを用いてログインします。
$ mysql -u root -pMariaDB> CREATE USER '[追加ユーザーID]'@'[ホスト名 or IPアドレス]' IDENTIFIED BY '[パスワード]';
MariaDB> GRANT ALL PRIVILEGES ON [スキーマ名].* TO '[追加したユーザーID]'@'[接続元ホスト名やIPアドレス]';
MariaDB> FLUSH PRIVILEGES;
MariaDB> quit;上記のようにユーザーの追加と権限の付与を行います。
外部から接続を許可する場合は、下記のように「%」ワイルドカードをつけます。
MariaDB> CREATE USER '[追加ユーザーID]'@'%' IDENTIFIED BY '[パスワード]';前述した「GRANT ALL PRIVILEGES ON [スキーマ名].*」の部分で権限設定のためのデータベース・テーブルを指定しますが、全権限を付与する場合は下記のようになります。「GRANT ALL」のALLの部分はselectやupdateなどの操作制限できます。
参考:GRANT – MariaDB Knowledge Base
MariaDB> GRANT ALL PRIVILEGES ON *.* TO '[追加ユーザーID]'@'[ホスト名 or IPアドレス]';ユーザー削除の場合は下記のように行います。
MariaDB> DROP USER '[追加ユーザーID]'@'[ホスト名 or IPアドレス]';最後に設定を反映させて完了となります。
MariaDB> FLUSH PRIVILEGES;
MariaDB> quit;ちなみに追加したユーザーの確認は下記のようになります。
MariaDB> SELECT user,host FROM mysql.user;5 再インストールしたMariaDBへログインしてみる
ユーザーIDを指定しログインしてみます。
$ mysql -u [ユーザーID] -p
正しいパスワードを入力後、ログインできたら今回のミッションはとりあえず完了です!
ここまでちょっとした長旅でしたが、おそらく皆さんの中にも止むに止まれずDBを入れ直す必要がでてきてしまった方もいらっしゃることでしょう。私も過去現場で、色々やらかした人間の一人ですのでお気持ちはお察しします。失敗の根本的な原因として、周りから煽られたり、お客様から仕様変更掛かってパニックったり、本来落ち着いてやるべき仕事ができずに、自分でも予想外な行動を取ってしまうなど様々な原因があるでしょう。こればっかりは経験積むしかないと思います。私もまだまだ未熟者なので、たくさんの失敗があるかと思いますが、その失敗を財産として、こちらのブログにネタ記事としてあげていければ後進のためにもなるかと思います。ということで、たくさん失敗して逝きます!


Be the first to comment