MySQL 5.7を入れる

「がとらぼ」の動いているサーバ(というか「がとらぼ」は規模が小さいのでおまけで相乗り)が、電源となっていたUPSの故障で、突然電源を絶たれた。普通は大したダメージにならないんだけど、これが余程タイミングが悪かったのかDBサーバのデータが手酷く壊れたようで、復旧を試みてもまったく歯が立たず。
MySQLをクリーンインストールしてバックアップのデータを流し込むことにした。
大量のデータを抱えるデータベースを迂闊に触るとロクなことにならないということもあってこのホストは構築時に入れたMySQL 5.5のままでいたが、せっかくクリーンインストールするならということでMySQL 5.7を入れることに。

別ホストではMySQL 5.6から5.7に更新したことがあるが、こちらはMySQL本体更新後にmy.cnfをちょろっと修正してmysql_upgradeを実行しただけでわりとサクッといった。(MySQLが起動しなくなったのでログ見ながらmy.cnfを修正したというのはあったけど)

今回はMySQLのクリーンインストールなので更新より簡単かなと思ったが勝手が違って意外と苦労したので備忘録。

インストール

FreeBSDのportsでインストールした。
# cd /usr/ports/databases/mysql57-server
# make install clean
構築時のオプションとしては普通?は初期値かINNOBASE(コンパイル静的)を追加で[x]付ける程度かしら。
これでmysql57-serverとmysql57-clientがインストールされる。

FreeBSDのportsではMySQL5.6以降? my.cnfの置き場所が /usr/local/etc/mysql 下に変更になっているようなのでrc.confの指定を変更する。

/etc/rc.conf
1
2
3
mysql_enable="YES"
mysql_optfile="/usr/local/etc/mysql/my.cnf"
#mysql_args=" --skip-grant-tables"    #MySQL5.7の最初の起動時だけ有効にする(後述)

/usr/local/etc/my.cnf
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
[client]
#中略
default-character-set           = utf8mb4

[mysqld]
#中略
character-set-server            = utf8mb4
#collation-server               = utf8mb4_bin
collation-server                = utf8mb4_general_ci
log-error                       = /var/log/mysqld-error.log
#中略

[mysqldump]
#中略
default-character-set           = utf8mb4

最初から用意されているmy.cnfの雛形にデフォルトの文字コードの指定を追加しておく。(エラーログも)
他はそのままで良いかと思う。(と、書いておきながら、いろいろ手を入れたけど)

MySQLサーバ起動

# service mysql-server start
または
# /usr/local/etc/rc.d/mysql-server start

ここは全く変わらず。

MySQLのCLIログイン

MySQL 5.7以前はMySQLのCLIの初回ログインは何も考えずにできた。
MySQL 5.7ではおせっかいなことに初期状態の管理者アカウントrootに勝手にユニークなパスワードが付けられるらしい。つまり(普通には)パスワードを何とかして知らないとログインできないということになる。
MySQLサーバを起動すると自動的root用のパスワードが付けられて、それがログ(テキストログ?)に記録されているのでそれを見ると判るということであるが、設定したmy.cnfの都合で存在しないので不明。それでは何もできないので上のmy.cnfの例のように--skip-grant-tablesをオプション指定するか--skip-grant-tablesを付けて手動でmysqldを実行する。これで以前のmysqlのCLI同様rootをパスワード無しで使える。

% mysql mysql
root@localhost [mysql]> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MySecretPassword';
Query OK, 0 rows affected (0.00 sec)

root@localhost [mysql]> CREATE DATABASE new_db;
Query OK, 0 rows affected (0.00 sec)

root@localhost [mysql]> CREATE USER 'newuser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NewUserPassword';
Query OK, 0 rows affected (0.01 sec)

root@localhost [mysql]> GRANT ALL PRIVILEGES ON new_db.* TO 'newuser'@'localhost';
Query OK, 0 rows affected (0.01 sec)

root@localhost [mysql]> DROP DATABASE test;
Query OK, 0 rows affected (0.00 sec)

root@localhost [mysql]> exit
Bye
%

mysqlコマンドでMySQLのmysqlデータベースに接続する。
rootパスワードの設定にはMySQL 5.7.6以降はALTER USERを使うらしい。
新しいデータベース new_dbを作成。これは以前から変わらない。
新しいユーザー newuserを作成。
先に作成したnew_dbの全権をnewuserに与える。
最初から存在するtestデータベースを削除する。
MySQLのCLIを終了。

rootユーザーのパスワードを設定したら先に設定した /etc/rc.confの --skip-grant-tables行を削除してMySQLサーバーを再起動する。

ユーザーの作成は以前の様にGRANTでデータベースへの権限付けと同時に行うことはできなくなったらしい。CREATE USERでユーザーを作成するのとGRANT hogeで権限付けを分けて行う。ここは以前が変だったので常識的になったといえるかも。

または/usr/local/bin/mysql_secure_installationを実行してメッセージに従って入力することでrootのパスワードを設定できる他幾つか機能があるらしいが使いたくない。でも、今後はこれが標準手順になるのかしら?

これでMySQL 5.7で最初に躓くところは終わり?

関連記事:

Cisco 7961G電話機にSSHでログインする

題名はCiscoの7961G電話機だけど、Ciscoの他の機種も同じくSSHで電話機にログインできる筈。
ただし、この記事の内容は7961電話機を含め古い機種向けかしら。
あと、この記事では一番肝心の部分が不明という・・・

電話機の設定
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
<device>
    中略
    <sshuserid>cisco</sshuserid>
    <sshpassword>cisco</sshpassword>
    中略
    <vendorconfig>
        中略
        <sshaccess>l0</sshaccess>
        <sshport>22</sshport>
        中略
    </vendorconfig>
    中略
</device>

ポート指定は省略しても良い筈。

設定ファイルを変更したら反映させるために電話機をリセットする。

以下、電話機のIPアドレスを192.168.2.26とする。

7961電話機は古いので(ここ1,2年でリリースされた最新のファームウエアでも変わらず)SSHの古い暗号を使う。最近のSSHの標準的な接続条件では弾かれる筈。
そこで、SSHでログインを行う端末側に設定を追加する。

~/.ssh/config (Unix系OSの場合の設定例)
1
2
3
Host 192.168.2.26
    KexAlgorithms diffie-hellman-group1-sha1
    Ciphers aes128-cbc

全ての接続先ではなく7961電話機のIPアドレスに接続するときだけ変更されるようにHost hogeで指定。

% ssh  cisco@192.168.2.26
cisco@192.168.2.26's password: cisco
login: debug
password: debug 

001B54MACaddr> show ?

  show bulkreginfo
      bulkreginfo                                            

  show arp
      show arp information   

中略

001B54MACaddr> exit
Connection to 192.168.2.26 closed.
 %
~/.ssh/configの編集が嫌なら
% ssh cisco@192.168.2.26 -o Ciphers="aes128-cbc" -o KexAlgorithms="diffie-hellman-group1-sha1"

電話機の設定のsshUserIdとsshPasswordで指定したアカウントとパスワードでログインする。(1段めの認証)
login: が表示される。(2段めの認証)
古いファームウエアや機種では普通のパスワード認証(アカウント default とパスワード user) でログインできたようだが、現在はdefaultアカウントだけチャレンジレスポンス認証になってるっぽい。探したんだけど情報が無くレスポンスの作り方が不明でどうして良いやら。だからdefaultユーザーでログインできない。
知ってる人は教えてください。

以下2つは普通のパスワードでログインできる。
  • アカウント名: debug、パスワード: debug
  • アカウント名: log、パスワード: log

アカウント毎にできることが違うのでdefaultではログインできないけどdebugでログインできるなら良いということではない筈。

関連記事:

Up