ビジネス向けウェブサイト構築運営、ウェブサービス・アプリの企画開発

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

2011年8月30日 17:10 コメント(0)

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()

2010年10月18日 12:59 コメント(0)

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

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

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

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

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

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

2010年6月27日 18:40 コメント(0)

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

関連サイト

Webサービスやインターネットメディアをつくってアイデアをカタチにしています。企画設計からプログラミング (主にLAMP環境, Perl/PHP, JavaScript, HTML, CSS, JSON)、データベースやサーバ構築、デザインまでバリバリやっています。最近はフレームワークやウェブアプリも。

Twitter, はてブ, GREE, ブクログ

最近のコメント

  • 表示件数はデフォルトで、1ページに表示す (thingsym)
  • 大変役立ちました。 JSON FEEDを (bunbun)
ページの先頭へ