発売してすぐ買ったものの、2週間以上放置していたSnow Leopardをようやくインストールしました。移行手順をちょっとメモしておきます。
環境
- MacOSX Leopard(10.5)からの移行
- マシン: iMac(Early 2008)Core 2 Duo 2.4 GHz
外付けHDDにCarbon Copy Clonerでバックアップ
以下の外付けHDDを購入し、Carbon Copy Cloner でバックアップを作成しました。これで万が一の事があっても大丈夫。
Leopardがインストールされた起動ディスクは123GBほど使用していましたが、バックアップに3時間弱かかりました。おやすみ前の作業をおすすめします。なおCarbon Copy Clonerはドネーション(寄付)ウェアです。

起動ディスクを外付けHDDにまるごとバックアップ
バックアップが済んだら、念のためこのHDDから起動できるか確認しておきます。なおこのHDDの説明書には「OS起動はサポートされておりません」と明記されているので、くれぐれも自己責任でお願いします。
さらにTime Machineでバックアップをとっておく
実はCarbon Copy Clonerを使うのは初めて。それとOSXの移行アシスタントのほうがスムーズかも、という思いがあったので、Time Machineでもバックアップをとっておきました。
さらにさらに、Snow Leopardのインストールは別パーティションに
どこまで用心深いんだというかんじですが、起動ディスクの容量に余裕があったので、Leopardは残したままパーティションを分割し、Snow Leopardは別パーティションにインストールしました。
Disk Utilityを使えば既存のLeopardはそのまま、パーティションを分割できます。

Disk UtilityでSnow Leopard用のパーティションを追加します。
Snow Leopardをインストール
ようやくSnow Leopardのインストールを開始。Leopard上からインストールを実行できる(DVD起動でない)ようになったので、だいぶ速いですね。
インストールオプションは
- プリンタ: 「近くにあるプリンタ、および一般的なプリンタ」
- 追加言語環境: 日本語のみ
- その他: X11, Rosetta, QuickTime 7
を選択しました。

インストールオプション
インストール直後にTime Machineから移行
インストールが終わりWelcomeムービーが流れると、「すでに Mac をお持ちですか?」画面が表示されます。今回はここでTime Machineから移行作業を実行しました。
いったんログインしてから移行アシスタントを実行することもできるのですが、その場合ログイン中のユーザーは復元することができません。別のユーザーを作るのも面倒なので、ログイン前に済ませてしまいました。
.png)
移行アシスタント
移行アシスタントで移行したもの、しなかったものは以下のとおりです。
移行したもの
- 移行したもの
- ユーザ
- ミュージック、ピクチャなど
- 「その他のファイルとフォルダ」(~/.emacsなどが対象になるらしい)
- 設定
- 移行しなかったもの
- アプリケーション
- 「<ドライブ名>上のその他のファイルとフォルダ」
- (MacPortsで/opt以下にインストールしたものなどは再インストールしたい)
注意事項
今回は既存のLeopardをそのまま残し、さらに移行アシスタントでDockやメニューバーの設定を復元しました。こうした場合、Snow LeopardでDockに表示されるアイコンがLeopard上のアプリケーションを参照したままとなります。
インストール直後に設定しなおすことをおすすめします。
移行を終えて
今のところの感想としては、
- よい
- OSの起動が速い
- Finderが多少キビキビしている
- 3,000円程度というお得感
- 気になる
- VirtualBoxでWindows XPの画面が乱れる
- MacPortsでruby, Railsをインストールしたが、マイグレーションなどのRakeタスクが動かなかった(詳細未調査)
といったところでしょうか。全体的にはおおむね快調です。
参考
MySQL(5.0系)で、すでにレコードが存在するテーブルにNOT NULLかつDEFAULTなしの列を追加してもエラーにならなかった。きちんと理解していないので調べておく。
以下のテーブルを作成し、レコードを追加しておく。
mysql> CREATE TABLE users (id INTEGER PRIMARY KEY);
mysql> DESC users;
+-------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | |
+-------+---------+------+-----+---------+----------------+
mysql> INSERT INTO users VALUES(1); |
NOT NULLでDEFAULTなしの列を追加してみる。
mysql> ALTER TABLE users ADD (name VARCHAR(255) NOT NULL,
age INTEGER NOT NULL, created_at DATETIME NOT NULL); |
エラーにならず、以下の値が設定された。
mysql> SELECT * FROM USERS;
+----+------+-----+---------------------+
| id | name | age | created_at |
+----+------+-----+---------------------+
| 1 | | 0 | 0000-00-00 00:00:00 |
+----+------+-----+---------------------+ |
どうやら「データタイプデフォルト値」が設定されるもよう。
これは「ストリクトSQLモード」が有効な場合でも同じ結果となる。試してみる。
-- いったん列を削除
mysql> ALTER TABLE users DROP name;
mysql> ALTER TABLE users DROP age;
mysql> ALTER TABLE users DROP created_at;
-- ストリクトSQLモードを有効に
mysql> SET sql_mode = 'STRICT_ALL_TABLES';
mysql> SELECT @@sql_mode;
+-------------------+
| @@sql_mode |
+-------------------+
| STRICT_ALL_TABLES |
+-------------------+
-- ストリクトSQLモードでもエラーにならない
mysql> ALTER TABLE users ADD (name VARCHAR(255) NOT NULL,
age INTEGER NOT NULL, created_at DATETIME NOT NULL);
mysql> SELECT * FROM USERS;
+----+------+-----+---------------------+
| id | name | age | created_at |
+----+------+-----+---------------------+
| 1 | | 0 | 0000-00-00 00:00:00 |
+----+------+-----+---------------------+ |
せめてストリクトSQLモードが有効な場合にはエラーにしてほしいですね。要注意です。
参照ドキュメント:
危なかった。勘違いしてた。
int(11)の「11」って表示桁数を揃えるためのものであって、格納できるのはあくまで4バイトなんですね。
参照: 本家ドキュメント
試してみる。
mysql> create table int_test (id int(11) primary key);
Query OK, 0 rows affected (0.04 sec)
mysql> desc int_test;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
+-------+---------+------+-----+---------+-------+
1 row in set (0.00 sec)
mysql> insert into int_test values(2147483647);
Query OK, 1 row affected (0.00 sec)
mysql> insert into int_test values(2147483648);
ERROR 1062 (23000): Duplicate entry '2147483647' for key 1 |