これは、なにをしたくて書いたもの?
MySQLの次のLTSである、MySQL 8.4.0がリリースされました。
MySQL :: MySQL 8.4 Release Notes :: Changes in MySQL 8.4.0 (2024-04-30, LTS Release)
ふだんの自分はMySQLをインストールする時はaptリポジトリーを使っているのですが、そのままだとMySQL 8.4をインストールしようとします。
※デフォルトが8.4に向いているからです
MySQL :: A Quick Guide to Using the MySQL APT Repository
8.4.0はリリースされて日が浅いので、まだしばらくは8.0のままにしておきたいのでaptリポジトリーを使いつつMySQL 8.0をインストール
する方法をまとめておきます。
環境
今回の環境はこちら。Ubuntu Linux 22.04 LTSです。
$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.4 LTS Release: 22.04 Codename: jammy $ uname -srvmpio Linux 5.15.0-105-generic #115-Ubuntu SMP Mon Apr 15 09:52:04 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
MySQLのaptリポジトリーを追加する
mysql-apt-configの0.8.30-1以降は、MySQL 8.4がデフォルトになっているようです(0.8.29-1まではMySQL 8.0がデフォルト)。
MySQL :: Download MySQL APT Repository
まずはaptリポジトリーを追加します。
$ curl -LO https://dev.mysql.com/get/mysql-apt-config_0.8.30-1_all.deb $ sudo dpkg -i mysql-apt-config_0.8.30-1_all.deb
最初に対話形式で、インストールするMySQLのメジャーバージョンを聞かれます。
デフォルトはMySQL 8.4になっていますね。
これは選択することができます。
とりあえず、この段階ではMySQL 8.4のままにしておきます。
パッケージの情報を更新します。
$ sudo apt update
mysql-server
パッケージを確認すると、MySQL 8.4を見ています。
$ apt show mysql-server Package: mysql-server Version: 8.4.0-1ubuntu22.04 Priority: optional Section: database Source: mysql-community Maintainer: MySQL Release Engineering <mysql-build@oss.oracle.com> Installed-Size: 77.8 kB Depends: mysql-community-server (= 8.4.0-1ubuntu22.04) Homepage: http://www.mysql.com/ Download-Size: 67.0 kB APT-Sources: http://repo.mysql.com/apt/ubuntu jammy/mysql-8.4-lts amd64 Packages Description: MySQL Server meta package depending on latest version The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, and robust SQL (Structured Query Language) database server. MySQL Server is intended for mission-critical, heavy-load production systems as well as for embedding into mass-deployed software. MySQL is a trademark of Oracle. This is a meta package that depends on the latest mysql server package available in the repository. N: 追加レコードが 2 件あります。表示するには '-a' スイッチを付けてください。
ちなみに、apt update
しない状態だとUbuntu LinuxのリポジトリーにあるMySQLを見たままになるので、パッケージ情報の更新は必須ですね。
$ apt show mysql-server Package: mysql-server Version: 8.0.36-0ubuntu0.22.04.1 Priority: optional Section: database Source: mysql-8.0 Origin: Ubuntu Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com> Original-Maintainer: Debian MySQL Maintainers <pkg-mysql-maint@lists.alioth.debian.org> Bugs: https://bugs.launchpad.net/ubuntu/+filebug Installed-Size: 35.8 kB Depends: mysql-server-8.0 Homepage: http://dev.mysql.com/ Task: lamp-server Download-Size: 9,460 B APT-Sources: https://mirrors.edge.kernel.org/ubuntu jammy-updates/main amd64 Packages Description: MySQL database server (metapackage depending on the latest version) This is an empty package that depends on the current "best" version of mysql-server (currently mysql-server-8.0), as determined by the MySQL maintainers. Install this package if in doubt about which MySQL version you need. That will install the version recommended by the package maintainers. . MySQL is a fast, stable and true multi-user, multi-threaded SQL database server. SQL (Structured Query Language) is the most popular database query language in the world. The main goals of MySQL are speed, robustness and ease of use. N: 追加レコードが 1 件あります。表示するには '-a' スイッチを付けてください。
で、この状態からMySQL 8.0を指すように切り替えるには以下のコマンドを実行します。
$ sudo dpkg-reconfigure mysql-apt-config
すると再びインストールするMySQLのバージョンを選択できるようになります。
決定すると、上書きの確認を求められるのでy
。
ファイル'/usr/share/keyrings/mysql-apt-config.gpg'は既に存在します。 上書きしますか? (y/N) y
MySQL 8.0にしてみましょう。
この直後にapt show
でmysql-server
を確認してみると、Ubuntu Linuxのリポジトリーの情報を参照するようになっています。
$ apt show mysql-server Package: mysql-server Version: 8.0.36-0ubuntu0.22.04.1 Priority: optional Section: database Source: mysql-8.0 Origin: Ubuntu Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com> Original-Maintainer: Debian MySQL Maintainers <pkg-mysql-maint@lists.alioth.debian.org> 〜省略〜
なので、再度apt update
。
$ sudo apt update
これでインストールしたaptリポジトリーのMySQL 8.0を参照するようになりました。
$ apt show mysql-server Package: mysql-server Version: 8.0.37-1ubuntu22.04 Priority: optional Section: database Source: mysql-community Maintainer: MySQL Release Engineering <mysql-build@oss.oracle.com> 〜省略〜
CLIで設定する
ここまでは対話形式で設定していましたが、コンテナ作成時などCLIで設定したい場合はこのままだと不便ですね。
CLIで設定できるようにしてみたいと思います。
開始時点は、aptリポジトリーの設定はMySQL 8.4に向けている(デフォルト)の状態とします。
現在の設定を確認します。
$ sudo debconf-get-selections | grep mysql mysql-apt-config mysql-apt-config/repo-url string http://repo.mysql.com/apt # Choices: MySQL Server & Cluster (Currently selected: mysql-8.4-lts), MySQL Tools & Connectors (Currently selected: Enabled), MySQL Preview Packages (Currently selected: Disabled), Ok mysql-apt-config mysql-apt-config/select-product select Ok mysql-apt-config mysql-apt-config/preview-component string # Choices: mysql-8.0, mysql-innovation, mysql-8.4-lts, mysql-cluster-8.0, mysql-cluster-innovation, mysql-cluster-8.4-lts, None mysql-apt-config mysql-apt-config/select-server select mysql-8.4-lts mysql-apt-config mysql-apt-config/select-preview select Disabled mysql-apt-config mysql-apt-config/repo-codename select jammy mysql-apt-config mysql-apt-config/unsupported-platform select abort mysql-apt-config mysql-apt-config/repo-distro select ubuntu mysql-apt-config mysql-apt-config/select-tools select Enabled mysql-apt-config mysql-apt-config/tools-component string mysql-tools
debconf-get-selections
がインストールされていない場合は、こちらのコマンドで。
$ sudo apt install debconf-utils
MySQL 8.0を選択。
$ echo 'mysql-apt-config mysql-apt-config/select-server select mysql-8.0' | sudo debconf-set-selections
このあとはdpkg-reconfigure
で設定するのかなと思ったのですが、そのまま返ってこなくなったので…
$ sudo dpkg-reconfigure --frontend noninteractive mysql-apt-config
mysql-apt-configを上書きインストールしました。
$ sudo DEBIAN_FRONTEND=noninteractive dpkg -i mysql-apt-config_0.8.30-1_all.deb
これでもパッケージ情報を更新すると
$ sudo apt update
MySQL 8.0が選択されるようになっています。
$ sudo apt show mysql-server | grep 8.0 WARNING: apt does not have a stable CLI interface. Use with caution in scripts. Version: 8.0.37-1ubuntu22.04 Depends: mysql-community-server (= 8.0.37-1ubuntu22.04) APT-Sources: http://repo.mysql.com/apt/ubuntu jammy/mysql-8.0 amd64 Packages
こうなると、最初からdebconf-set-selections
で設定しておくとよさそうですね。
ちなみに、8.4に戻す場合はこちら。
$ echo 'mysql-apt-config mysql-apt-config/select-server select mysql-8.4-lts' | sudo debconf-set-selections $ sudo DEBIAN_FRONTEND=noninteractive dpkg -i mysql-apt-config_0.8.30-1_all.deb $ sudo apt update
オマケ:インストール時のrootユーザーのパスワードを設定する
mysql-server
をインストールすると、以下のような設定が追加されます。
$ sudo debconf-get-selections | grep mysql-community-server mysql-community-server mysql-community-server/re-root-pass password mysql-community-server mysql-community-server/root-pass password mysql-community-server mysql-community-server/data-dir note mysql-community-server mysql-server/lowercase-table-names select mysql-community-server mysql-community-server/root-pass-mismatch error mysql-community-server mysql-community-server/remove-data-dir boolean false mysql-community-server mysql-server/default-auth-override select Use Strong Password Encryption (RECOMMENDED)
このうち、rootのパスワードの設定は以下の2つです。ここでは「mypassword」で設定しています。
$ echo 'mysql-community-server mysql-community-server/root-pass password mypassword' | sudo debconf-set-selections $ echo 'mysql-community-server mysql-community-server/re-root-pass password mypassword' | sudo debconf-set-selections
mysql-community-server
の他にもmysql-server-8.0
という項目もありましたが、ちょっと違いそうです。
あとはMySQLサーバーをインストールすればOKです。
$ sudo DEBIAN_FRONTEND=noninteractive apt install mysql-server
おわりに
MySQLをaptリポジトリーからインストールする時に、MySQL 8.0が選択されるようにしてみました。
CLIでできるようにも調べたりしたのですが、こちらはけっこう大変でした…。
Dockerコンテナ作成時やインストールスクリプトを書く時になどに使えたりすると思うので、覚えておきましょう。