事業の成長を支えるマーケティングの顧問サービス / ウェブサイト内製・自主運営

MySQL Community Server 5.6.x にアップグレード (Mac OS X)

データベースエンジン InnoDB (イノデービー) やレプリケーションが大幅に改善した MySQL 5.6。Mac OS X (v10.8.3) にある MySQL (v5.5.28) を バージョン 5.6.x にアップグレード。データの移行と環境構築をしてみた。

アップグレードする前に MySQL のデータをバックアップすることをおすすめします。

  1. 環境設定パネルやコンソールを使って稼働中の MySQL をいったん停止します。
  2. Download MySQL Community Server から MySQL の最新バージョン、Mac OS X ver. 10.7 (x86, 64-bit), DMG Archive (mysql-5.6.x-osx10.7-x86_64.dmg) をダウンロード。
  3. mysql-5.6.x-osx10.7-x86_64.dmg をダブルクリックして展開。

  4. mysql-5.6.x-osx10.7-x86_64.pkg をダブルクリック。Macのセキュリティ設定上、ダイアログボックスが表示される場合は、いったん閉じて mysql-5.6.x-osx10.7-x86_64.pkg を「control + クリック (右クリック)」でコンテキストメニューを表示。「開く」メニューをクリック。ダイアログボックスの「開く」ボタンを押します。


  5. インストーラーに沿ってインストール。
  6. 必要に応じて MySQLStartupItem.pkg をダブルクリックしてインストール。
  7. MySQL.prefPane もダブルクリック 。環境設定パネルを置き換えます。
  8. インストール完了。

MySQLデータの移行

前バージョンのデータベースのデータを最新バージョンの MySQL へ。ごっそり置き換えます。

ターミナル上で、

$ sudo cp -pfR /usr/local/mysql-5.5.28-osx10.6-x86_64/data /usr/local/mysql-5.6.x-osx10.7-x86_64/

データ移行完了。

MySQL を起動

ターミナル上で

$ sudo /Library/StartupItems/MySQLCOM/MySQLCOM start

または、アップルメニュー「システム環境設定 > MySQL」から「Start MySQL Server」ボタンを押します。stopped から runing に。

DBD::mysql アップグレード

Movable Type が動かず。

install_driver(mysql) failed: Attempt to reload DBD/mysql.pm aborted. Compilation failed in require.
$ cpanm DBD::mysql

で、DBD::mysql をアップグレードすると

Library not loaded: libmysqlclient.18.dylib でエラーに

Error: Can't load '/private/var/root/.cpanm/work/1365857788.17684/DBD-mysql-4.023/blib/arch/auto/DBD/mysql/mysql.bundle' for module DBD::mysql: dlopen(/private/var/root/.cpanm/work/1365857788.17684/DBD-mysql-4.023/blib/arch/auto/DBD/mysql/mysql.bundle, 2): Library not loaded: libmysqlclient.18.dylib

前バージョンの libmysqlclient.18.dylib にシンボリックリンクを張っているのでエラーに。最新バージョンの libmysqlclient.18.dylib にシンボリックリンクを張り替える。

$ rm /usr/lib/libmysqlclient.18.dylib
$ ln -s /usr/local/mysql-5.6.x-osx10.7-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

再度アップグレード。

$ cpanm DBD::mysql

Movable Type が動いた。

MySQL 5.6.x のアップグレード完了。

MySQLをバージョン5.5.xにアップデート

yum 経由で MySQL をアップデートした備忘録。

MySQL がバージョン 5.5.3 なってからコマンドやサーバオプション、変数に大幅な変更や廃止が加えられている。グーグルで検索すると今回の変更のことで MySQL が起動しないことがたくさんヒットする。この機会に古い設定を見直しておきたい。

バージョン5.5.x のインストールは無事に済んだが、データベースに繋がらず。

Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

再起動しても失敗。ログを見ると、いくつかエラーが見られる。

tail -50 /var/log/mysqld.log
...
110830 12:39:45 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
...
110830 12:39:46 [ERROR] /usr/libexec/mysqld: unknown variable 'default-character-set=utf8'
110830 12:39:46 [ERROR] Aborting
...
110830 12:39:47 [Note] /usr/libexec/mysqld: Shutdown complete

一つ一つ解決。

まずは、デフォルトで文字コードを設定しているが、文字コードの設定の方法が変わったみたいだ。それで MySQL が起動せずにシャットダウン。

my.cnf の設定を変更。[mysqld] ディレクティブにある default-char-set を

default-character-set=utf8

から

character-set-server=utf8

に変更。

再起動ができるようになった。

そしてつぎは、アップグレードの度に実行する mysql_upgrade コマンドでテーブルの互換性をチェック、修正を施す。

mysql_upgrade -u root -p

無事アップグレードが済んで、データベースに繋がった。

関連サイト

文字列を一括置換するSQL文 – 文字列関数 REPLACE()

SQL で文字列を置換するには、文字列関数 REPLACE() を使います。置換対象にマッチした文字列を置換後の文字に置き換えます。

SELECT REPLACE(カラム名,'置換対象','置換後の文字') FROM テーブル名;

置換対象は、大文字小文字を区別します。マルチバイトも可能。

以下の UPDATE 文で指定したカラム名の文字列を対象に一括置換ができます。

UPDATE テーブル名 SET カラム名=REPLACE(カラム名,"置換対象","置換後の文字");

mysqldumpでMySQLのデータをバックアップ

MySQLのデータをバックアップ (ダンプ) するにはバックアッププログラム mysqldump を使用します。バックアップで生成したsqlファイルを外部記憶メディアに保存したり、別のデータベースへの移行に活用できます。

以下のコマンドでバックアップします。

データベース全体のバックアップ (オプションに–all-databasesを使用)

mysqldump -u[user] -p[password] --all-databases > backup.sql

または

mysqldump --user=[user] --password=[password] --all-databases > backup.sql

特定のデータベースをバックアップ

mysqldump -u[user] -p[password] [databese] > backup.sql

または

mysqldump --user=[user] --password=[password] [databese] > backup.sql

複数のデータベースをバックアップ

mysqldump -u[user] -p[password] --databases [databese1] [databese2] [...] > backup.sql

または

mysqldump --user=[user] --password=[password] --databases [databese1] [databese2] [...] > backup.sql

特定のテーブルをバックアップ

mysqldump -u[user] -p[password] [databese] [table] > backup.sql

または

mysqldump --user=[user] --password=[password] [databese] [table]> backup.sql

実際にテーブルをバックアップ

CentOSでは、

/usr/bin/mysqldump -uroot -phogegoge --all-databases > backup.sql

MacOSXでは、

/usr/local/mysql/bin/mysqldump -uroot -phogehoge --all-databases > backup.sql

でデータベース全体のバックアップ。

データベースを復元するには

データベース全体の復元

mysql -u[user] -p[password] < backup.sql

特定のデータベースを復元

mysql -u[user] -p[password] [databese] < backup.sql

関連サイト

データベースMySQLを64bit版に置き換える (Mac OS X Snow Leopard)

Mac OS X を Leopard から Snow Leopard にアップグレードすると、MySQL の 32bit 版は動かないようだ。エラーに。

Software error:
install_driver(mysql) failed: Can't locate DBD/mysql.pm in @INC (@INC contains:
/Library/Perl/Updates/5.10.0 /System/Library/Perl/5.10.0/darwin-thread-multi-2level
/System/Library/Perl/5.10.0 /Library/Perl/5.10.0/darwin-thread-multi-2level
/Library/Perl/5.10.0 /Network/Library/Perl/5.10.0/darwin-thread-multi-2level
/Network/Library/Perl/5.10.0 /Network/Library/Perl
/System/Library/Perl/Extras/5.10.0/darwin-thread-multi-2level
/System/Library/Perl/Extras/5.10.0 .) at (eval 11) line 3.
Perhaps the DBD::mysql perl module hasn't been fully installed,
or perhaps the capitalisation of 'mysql' isn't right.
Available drivers: DBM, ExampleP, File, Gofer, Proxy, SQLite, Sponge.
at test.cgi line 12
For help, please send mail to the webmaster (you@example.com),
giving this error message and the time and date of the error.
$ cd /usr/local/
$ ls
apache2				man
bin					mysql-5.1.36-osx10.5-x86
include				share
lib

ということで、64bit 版 MySQL にアップグレード。

から Mac OS X ver. 10.6 (x86, 64-bit) – mysql-5.1.42-osx10.6-x86_64.dmg をダウンロード。そして、展開。

mysql-5.1.42-osx10.6-x86_64.pkg をクリックしてインストール。MySQLStartupItem.pkg をクリックしてインストール。MySQL.perfPane をクリックして置き換え。

インストールの確認。

$ cd /usr/local/
$ ls
apache2				mysql
bin					mysql-5.1.36-osx10.5-x86
include				mysql-5.1.42-osx10.6-x86_64
lib					share
man

アップルメニュー「システム環境 > MySQL」 で「Start MySQL Server」ボタンを押してサーバを再起動。stopped から running になったことを確認。

ほか、mysql gem のインストール。オプションを指定して。

$ sudo env ARCHFLAGS="-arch x86_64" gem install mysql --
--with-mysql-config=/usr/local/mysql/bin/mysql_config

32bit版MySQLで使っていたデータに置き換え

32bit版MySQLで使っていたデータは、64bit 版 MySQLでも使えるようなので。

そのままコピー。

$ sudo cp -pfR /usr/local/mysql-5.1.36-osx10.5-x86/data /usr/local/mysql-5.1.42-osx10.6-x86_64/

で、データベースの置き換え完了!!