Vine-3.2 から、Vine-4.0 にアップグレードしたとき...
    MySQL が起動しない...メモ

    2006/12/2
    H.Suzuki <setter at i-red dot info>

    #ちなみに、私は、MySQL-Max 使ってました。
    ### 注 ### 整理されてない文章です。

    BACK


    DB サーバなので、DB のバックアップはとってあるという前提です...
    # 私の場合、ディレクトリベースのバックアップしかとってなかったりして...(^^;

    apt で Vine-3.2 を Vine-4.0 に

    アップグレード!

    しかし...

    MySQL が立ち上がりません

    (;;)Coppermine Photo Gallery や、xoops が動きません(;;)

    しかたないので、一度、Vine-3.2 の MySQL-4.x に戻すことに...

      # /etc/rc.d/init.d/mysql stop # 一応
      # apt-get remove MySQL-Max
      # apt-get remove php-mysql

    などで、MySQL 関連を全て削除。

    バックアップを復元。

      # cd /var/lib
      # rm -rf mysql
      # tar -zxvf mysql-bkup.tar.gz

    FTP で、Vine-3.2 の MySQL* と、php-mysql の rpm を拾ってくる。

      # rpm -ivh MySQL*
      # rpm -ivh php-mysql // 一応。

    php-mysql を アップグレード。

      # apt-get install php-mysql

    このとき、MySQL-shared もアップグレードされる。

    MySQL をアップデート対象から外しておく。

      # vi /etc/apt/apt.conf
      RPM
      {
      	Hold 
      	{
      		"^MySQL"; これを追加。
      	}
      }
      
    データベースをチェック・修正。

      # mysqlcheck -uroot -r -A

    で、 これで、Vine-4.0 で MySQL4.x が動くようになり、アプリも動くようになった。
    ふぅ...

    ...で、後日もう一度アップデート。

    まず、MySQL 4 でデータベースをダンプ。
      $ mysqldump   \
      	-uroot \
      	-hlocalhost \
      	--all-databases \
      	--opt \
      	--allow-keywords \
      	--flush-logs \
      	--hex-blob \
      	--master-data \
      	--max_allowed_packet=16M \
      	--quote-names  \
      	--result-file=mysql4-bkup.SQL
      
    あら、root のパスワードがない(^^;;;;;;

    既に書いてありますけど、やってなかったら、ダンプできなかったので、

      # mysqlcheck -uroot -r -A

    を実行。-> ダンプ成功。

    恐いので、念のため。
      # /etc/rc.d/init.d/mysql stop
      # cd /var/lib
      # tar -zcf mysql20061202.tar.gz mysql
      
    MySQL 5 を入れる前に、既存データベースを削除

      # rm -rf /var/lib/mysql

    apt のアップデート対象を復元。
      # vi /etc/apt/apt.conf
      
      RPM
      {
      	Hold 
      	{
      		"^MySQL"; これを削除。
      	}
      }
      
    MySQL を 4 -> 5 にアップグレード。

      # apt-get update; apt-get upgrade

    MySQL 5 が立ち上がっているはず。

    ダンプしてあるデータをインポートしました。
    で、xoops を開いたら、おばけの行進(;;)

    何回か、MySQL 4 <-> 5 行ったり来たりするはめに...

    ML のアドバイスやら、ググりまくりで、なんとかこぎ着けた。
    /etc/my.cnf に

      default-character-set = ujis
      skip-character-set-client-handshake

    などを追加(実際に使っている my.cnf は最後に)。
    そして、
      # /etc/rc.d/init.d/mysql stop
      # /etc/rc.d/init.d/mysql start
      
    MySQL 5 が起動しているはず。
    起動していない場合、ログファイル

      /var/lib/mysql/*.err

    をチェック。


    やっと、データをインポート。


      # mysql -u root < mysql4-bkup.SQL
      ERROR 1067 (42000) at line 1614: Invalid default value for 'title_indication'

    げっ、エラー...(;;)


    負けるものか...と、ググったら...近い症状が見付かった!

      # vi mysql4-bkup.SQL

    該当行の、default '' や、default '0' を削除

      # mysql -u root < mysql4-bkup.SQL

    よし、これでオッケーだろう!

    ログインできない...orz

    権限テーブルを修正する必要があるそうだ。

      # mysql_fix_privilege_tables

    おしまい(^^)。

    ####### Content of /etc/my.cnf #######
    [client]
    #password       = your_password	// B< You MUST set Password !!!
    port            = 3306
    socket          = /var/lib/mysql/mysql.sock
    set-variable    = default-character-set=ujis	<< 追加
    
    # The MySQL server
    [mysqld]
    port            = 3306
    socket          = /var/lib/mysql/mysql.sock
    skip-locking
    set-variable    = key_buffer=16M
    set-variable    = max_allowed_packet=1M
    set-variable    = table_cache=256
    set-variable    = sort_buffer=512K
    set-variable    = net_buffer_length=8K
    set-variable    = myisam_sort_buffer_size=8M
    set-variable    = long_query_time=1
    # log-bin
    server-id       = 1
    set-variable    = default-character-set=ujis	<< 追加
    skip-character-set-client-handshake		<< 追加
    
    [mysqldump]
    quick
    set-variable    = max_allowed_packet=16M
    set-variable    = default-character-set=ujis	<< 追加
    
    [mysql]
    no-auto-rehash
    # Remove the next comment character if you are not familiar with SQL
    #safe-updates
    set-variable    = default-character-set=ujis	<< 追加
    
    [isamchk]
    set-variable    = key_buffer=20M
    set-variable    = sort_buffer=20M
    set-variable    = read_buffer=2M
    set-variable    = write_buffer=2M
    
    [myisamchk]
    set-variable    = key_buffer=20M
    set-variable    = sort_buffer=20M
    set-variable    = read_buffer=2M
    set-variable    = write_buffer=2M
    
    [mysqlhotcopy]
    interactive-timeout
    

    DB の状態。
    
    mysql> show variables like 'char%';
    +--------------------------+----------------------------+
    | Variable_name            | Value                      |
    +--------------------------+----------------------------+
    | character_set_client     | ujis                       |
    | character_set_connection | ujis                       |
    | character_set_database   | ujis                       |
    | character_set_filesystem | binary                     |
    | character_set_results    | ujis                       |
    | character_set_server     | ujis                       |
    | character_set_system     | utf8                       |
    | character_sets_dir       | /usr/share/mysql/charsets/ |
    +--------------------------+----------------------------+
    8 rows in set (0.00 sec)