10月 032013
 

databaseのバックアップ/リストアをしたときに以下のようなエラーがでた。。

$ mysql disney -uhogeuser -phogepass < hogehoge.db
ERROR 1153 (08S01) at line 1393: Got a packet bigger than 'max_allowed_packet' bytes

どうも、パケットの最大サイズを超えているらしい。。。
最大サイズがいくつになっているかは、”show variables”で確認できるみたい。

mysql> show variables like 'max_allowed_packet';
+--------------------+---------+
| Variable_name      | Value   |
+--------------------+---------+
| max_allowed_packet | 1048576 |
+--------------------+---------+
1 row in set (0.00 sec)

この値を変えるにはmy.cnfで設定します。

$ sudo vi /etc/my.cnf
[mysqld]
max_allowed_packet=64MB

これで、mysqlを再起動すれば、反映されます。

$ sudo /etc/init.d/mysqld restart
10月 022013
 

MySQL2.4をインストールしただけでは、各ユーザがサイトを公開することが
できません。
そこで、UserDirを設定して、各ユーザがウェブ公開できるようにします。

1. UserDirを設定する。
作業は基本的に以下のファイルを編集して行います。

/usr/local/apache2/conf/httpd.conf

まずは、UserDirを設定します。
httpd.confに以下を追加します。

UserDir public_html

2. userdirのモジュールをロードするよう設定する

以下の行のコメントアウトをはずして、この行を有効にします。

# LoadModule userdir_module modules/mod_userdir.so

3. httpd-userdir.confを読み込む

以下の行のコメントアウトをはずして、この行を有効にします。

# Include conf/extra/httpd-userdir.conf

4. httpdを再起動します。

# /usr/local/apache2/bin/apachectl restart
9月 292013
 

mysqlのdatabaseのパラメータである、”character_set_results”, “character_set_server”
の変更方法を記載します。

文字化けなどの対処方法になるかもしれません。

mysql> show variables like 'character_set%';
+--------------------------+----------------------------------------+
| Variable_name            | Value                                  |
+--------------------------+----------------------------------------+
| character_set_client     | latin1                                 |
| character_set_connection | latin1                                 |
| character_set_database   | latin1                                 |
| character_set_filesystem | binary                                 |
| character_set_results    | latin1                                 |
| character_set_server     | latin1                                 |
| character_set_system     | utf8                                   |
| character_sets_dir       | /usr/local/mysql/share/mysql/charsets/ |
+--------------------------+----------------------------------------+
8 rows in set (0.00 sec)

my.cnfに以下を設定するして、mysqldを再起動

default-character-set=utf8
mysql> show variables like 'character_set%';
+--------------------------+----------------------------------------+
| Variable_name            | Value                                  |
+--------------------------+----------------------------------------+
| character_set_client     | latin1                                 |
| character_set_connection | latin1                                 |
| character_set_database   | latin1                                 |
| character_set_filesystem | binary                                 |
| character_set_results    | latin1                                 |
| character_set_server     | utf8                                   |
| character_set_system     | utf8                                   |
| character_sets_dir       | /usr/local/mysql/share/mysql/charsets/ |
+--------------------------+----------------------------------------+
8 rows in set (0.00 sec)
9月 292013
 

“character_set_database”の値が適切でないと、文字化けなどの
不具合が発生する可能性があります。

そこで、”character_set_database”を変更する方法をご紹介します。

以下のようにします。

mysql> alter database mytest character set utf8;
mysql>  show variables like 'character_set%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
 
mysql>
mysql>
 
mysql> alter database hogedb character set utf8;
Query OK, 1 row affected (0.00 sec)
 
mysql>  show variables like 'character_set%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
9月 282013
 
$ mysql -uroot
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 5.1.69 Source distribution
 
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
 
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
 
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 
mysql> set password for root@localhost=password('hogepass');
Query OK, 0 rows affected (0.00 sec)
 
mysql> Bye
$ mysql -uroot
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
8月 172013
 

NOT NULLを削除する

mysql> show fields from site;
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | int(11)      | NO   | PRI | NULL    | auto_increment |
| user_id     | int(11)      | NO   | MUL | NULL    |                |
| url         | varchar(500) | NO   | MUL | NULL    |                |
| name        | varchar(500) | NO   | MUL | NULL    |                |
| category_id | int(11)      | NO   | MUL | NULL    |                |
| description | text         | NO   |     | NULL    |                |
| published   | int(11)      | NO   |     | 1       |                |
| created_at  | datetime     | NO   |     | NULL    |                |
| updated_at  | datetime     | NO   |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+
9 rows in set (0.00 sec)
 
mysql> alter table site modify column user_id int;
Query OK, 16 rows affected (0.07 sec)
Records: 16  Duplicates: 0  Warnings: 0
 
mysql> show fields from site;
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | int(11)      | NO   | PRI | NULL    | auto_increment |
| user_id     | int(11)      | YES  | MUL | NULL    |                |
| url         | varchar(500) | NO   | MUL | NULL    |                |
| name        | varchar(500) | NO   | MUL | NULL    |                |
| category_id | int(11)      | NO   | MUL | NULL    |                |
| description | text         | NO   |     | NULL    |                |
| published   | int(11)      | NO   |     | 1       |                |
| created_at  | datetime     | NO   |     | NULL    |                |
| updated_at  | datetime     | NO   |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+
9 rows in set (0.00 sec)

NOT NULLを設定する

mysql> alter table site modify column user_id int not null;
Query OK, 16 rows affected (0.06 sec)
Records: 16  Duplicates: 0  Warnings: 0
 
mysql> show fields from site;
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | int(11)      | NO   | PRI | NULL    | auto_increment |
| user_id     | int(11)      | NO   | MUL | NULL    |                |
| url         | varchar(500) | NO   | MUL | NULL    |                |
| name        | varchar(500) | NO   | MUL | NULL    |                |
| category_id | int(11)      | NO   | MUL | NULL    |                |
| description | text         | NO   |     | NULL    |                |
| published   | int(11)      | NO   |     | 1       |                |
| created_at  | datetime     | NO   |     | NULL    |                |
| updated_at  | datetime     | NO   |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+
9 rows in set (0.00 sec)
8月 172013
 

MySQLのデフォルト設定の追加・削除は以下のように行います。

デフォルト設定の追加

mysql> show fields from site;
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | int(11)      | NO   | PRI | NULL    | auto_increment |
| user_id     | int(11)      | NO   | MUL | NULL    |                |
| url         | varchar(500) | NO   | MUL | NULL    |                |
| name        | varchar(500) | NO   | MUL | NULL    |                |
| link_url    | varchar(500) | NO   |     | NULL    |                |
| category_id | int(11)      | NO   | MUL | NULL    |                |
| description | text         | NO   |     | NULL    |                |
| published   | int(11)      | NO   |     | 0       |                |
| created_at  | datetime     | NO   |     | NULL    |                |
| updated_at  | datetime     | NO   |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+
10 rows in set (0.02 sec)
 
mysql> alter table site alter link_url set default 'http://example.com/';
Query OK, 0 rows affected (0.38 sec)
Records: 0  Duplicates: 0  Warnings: 0
 
mysql> show fields from site;
+-------------+--------------+------+-----+---------------------+----------------+
| Field       | Type         | Null | Key | Default             | Extra          |
+-------------+--------------+------+-----+---------------------+----------------+
| id          | int(11)      | NO   | PRI | NULL                | auto_increment |
| user_id     | int(11)      | NO   | MUL | NULL                |                |
| url         | varchar(500) | NO   | MUL | NULL                |                |
| name        | varchar(500) | NO   | MUL | NULL                |                |
| link_url    | varchar(500) | NO   |     | http://example.com/ |                |
| category_id | int(11)      | NO   | MUL | NULL                |                |
| description | text         | NO   |     | NULL                |                |
| published   | int(11)      | NO   |     | 0                   |                |
| created_at  | datetime     | NO   |     | NULL                |                |
| updated_at  | datetime     | NO   |     | NULL                |                |
+-------------+--------------+------+-----+---------------------+----------------+
10 rows in set (0.00 sec)

デフォルト設定を削除

mysql> alter table site alter link_url drop default;
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0
 
mysql> show fields from site;
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | int(11)      | NO   | PRI | NULL    | auto_increment |
| user_id     | int(11)      | NO   | MUL | NULL    |                |
| url         | varchar(500) | NO   | MUL | NULL    |                |
| name        | varchar(500) | NO   | MUL | NULL    |                |
| link_url    | varchar(500) | NO   |     | NULL    |                |
| category_id | int(11)      | NO   | MUL | NULL    |                |
| description | text         | NO   |     | NULL    |                |
| published   | int(11)      | NO   |     | 0       |                |
| created_at  | datetime     | NO   |     | NULL    |                |
| updated_at  | datetime     | NO   |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+
10 rows in set (0.04 sec)
7月 312013
 

ひとつのテーブルのidを別の二つのテーブルからCONSTRAINTでくくりつけようとすると
このエラーがでる。

INDEX `mtm_category2` (`mtm_category_id` ASC),
CONSTRAINT `mtm_category`
    FOREIGN KEY (`mtm_category_id`)
    REFERENCES `matome`.`mtm_category` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,

ここで指定している”mtm_category”という名前がかぶっていたためだった。
これを参照するテーブルでそれぞれ違う名前にしてあげればOK

5月 082013
 

既存のカラムを削除するには、”ALter”句を使用します。

以下のような感じで使用します。

mysql> ALTER TABLE <テーブル名> DROP <カラム名>

以下使用例です。

mysql> show fields from tmp;
+--------+--------------+------+-----+---------+----------------+
| Field  | Type         | Null | Key | Default | Extra          |
+--------+--------------+------+-----+---------+----------------+
| id     | int(11)      | NO   | PRI | NULL    | auto_increment |
| name   | varchar(100) | YES  |     | NULL    |                |
| age    | int(11)      | YES  |     | NULL    |                |
| tall   | int(11)      | YES  |     | NULL    |                |
| weight | int(11)      | YES  |     | NULL    |                |
+--------+--------------+------+-----+---------+----------------+
5 rows in set (0.02 sec)
 
mysql> ALTER TABLE tmp DROP weight;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0
 
mysql> show fields from tmp;
+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| id    | int(11)      | NO   | PRI | NULL    | auto_increment |
| name  | varchar(100) | YES  |     | NULL    |                |
| age   | int(11)      | YES  |     | NULL    |                |
| tall  | int(11)      | YES  |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
3月 182013
 

テーブル名の変更はRENAMEを使用します。

mysql> ALTER TABLE  RENAME ;
mysql> show tables;
+---------------+
| Tables_in_slt |
+---------------+
| member        |
| slt           |
+---------------+
2 rows in set (0.00 sec)

mysql> ALTER TABLE member RENAME user;
Query OK, 0 rows affected (0.00 sec)

mysql> show tables;
+---------------+
| Tables_in_slt |
+---------------+
| slt           |
| user          |
+---------------+
2 rows in set (0.00 sec)