カテゴリー: DB

MySQL Workbench 6.3でSynchronize Modelしようとしたらエラー

MySQL Workbench 6.3でSynchronize Modelしようとしたら以下のエラーが出て
テーブルなどを作成できなかった。

Executing SQL script in server
ERROR: Error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘COMMENT ”’ at line 5

調べてみると以下のページが見つかった。

MySQL Forums :: MySQL Workbench :: MySQL Workbench Synchronize error 1064 (COMMENT”)
http://forums.mysql.com/read.php?152,635281,635281#msg-635281

どうも既知の問題らしく、次のメンテナンスリリースでfixされる模様。

それまでは手動で不必要なCOMMENT部分を削除してねということらしい。

コメントを記載していないなら全部のCOMMENTをざっくり取り去ればOK。

次のメンテナンスリリースは日付は決まってないけどそんなに時間かからない
そうなので、とりあえず気長に待つしかなさそう。。
※元の記事が2015/09/25

MySQLWorkbenchのアップデート

MySQL Workbench
http://dev.mysql.com/downloads/workbench

最新版の「MySQL Workbench 6.3.4 」をインストールしようとしたら、
現在インストールされているバージョンのインストーラが無いと
アンインストールできない感じだったので探した。

ちなみに探したインストーラはこれ。
mysql-workbench-gpl-5.2.38-win32.msi

■古いインストーラがあるページ
http://download.softagency.net/mysql/Downloads/MySQLGUITools/

このページで該当のインストーラをダウンロードして、
アンインストール時にインストーラの場所を聞かれるので
フォルダを指定すればOK。

【MySQL】Error: Cannot load from mysql.proc. The table is probably corrupted

Error: Cannot load from mysql.proc. The table is probably corrupted

MySQL Workbenchで既存のDBからリバースエンジニアリングして、
テーブルの列の型とかを変更してから変更を反映させようとしたら

「Error: Cannot load from mysql.proc. The table is probably corrupted」

というエラーが発生した。

以下のサイトを参考にして対応。

MySQL Workbench cannot load mysql.proc
http://stackoverflow.com/questions/6789373/mysql-workbench-cannot-load-mysql-proc

# mysql_upgrade -u root -p
Enter password: 
Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck
Running 'mysqlcheck with default connection arguments
Running 'mysqlcheck with default connection arguments
fuel_auth.admins                                   OK
fuel_auth.migration                                OK
fuel_auth.users                                    OK
mysql.columns_priv                                 OK
mysql.db                                           OK
mysql.event                                        OK
mysql.func                                         OK
mysql.general_log                                  OK
mysql.help_category                                OK
mysql.help_keyword                                 OK
mysql.help_relation                                OK
mysql.help_topic                                   OK
mysql.host                                         OK
mysql.ndb_binlog_index                             OK
mysql.plugin                                       OK
mysql.proc                                         OK
mysql.procs_priv                                   OK
mysql.servers                                      OK
mysql.slow_log                                     OK
mysql.tables_priv                                  OK
mysql.time_zone                                    OK
mysql.time_zone_leap_second                        OK
mysql.time_zone_name                               OK
mysql.time_zone_transition                         OK
mysql.time_zone_transition_type                    OK
mysql.user                                         OK
Running 'mysql_fix_privilege_tables'...
OK

こんな感じで動いた。

その後Workbenchで再度反映を行ったら無事に反映された。

mysql_upgrade
http://blog.pdns.jp/mysql_upgrade/

ついでに上記のサイトにあるgrantで怒られていたのも直った。

MySQLでDB移行する時はmysql_upgradeを行おう
http://www.seeds-std.co.jp/seedsblog/269.html

rootユーザがおかしいと思ってたけど
バージョンの違いによるカラムの変化の問題だったとは。。

MySQLをrpmでインストールする

MySQLをrpmでインストールする

ローカル開発環境で色々なバージョンのmysqlをインストールすることになったのでメモ。

■今入っているmysqlを確認する。

# rpm -qa|grep mysql

■既に入っているmysqlを削除する

# yum remove mysql-*

■インストールしたいバージョンのmysqlを探す

Download MySQL Community Server

MySQL Community Server (Archived Versions)

■作業フォルダにインストールしたいバージョンをダウンロードしてくる

# wget http://dev.mysql.com/get/Downloads/MySQL-5.1/MySQL-5.1.73-1.glibc23.x86_64.rpm-bundle.tar

■解凍する

# tar xvfp MySQL-5.1.73-1.glibc23.x86_64.rpm-bundle.tar 
MySQL-server-5.1.73-1.glibc23.x86_64.rpm
MySQL-shared-compat-5.1.73-1.glibc23.x86_64.rpm
MySQL-debuginfo-5.1.73-1.glibc23.x86_64.rpm
MySQL-embedded-5.1.73-1.glibc23.x86_64.rpm
MySQL-devel-5.1.73-1.glibc23.x86_64.rpm
MySQL-client-5.1.73-1.glibc23.x86_64.rpm
MySQL-test-5.1.73-1.glibc23.x86_64.rpm
MySQL-shared-5.1.73-1.glibc23.x86_64.rpm

■yum localinstallでまとめてインストールする
※バージョンのところとかは適宜変更。

# yum localinstall MySQL-{client,devel,server,shared-compat}-5.1.73-1.glibc23.x86_64.rpm
Loaded plugins: fastestmirror, versionlock
Setting up Local Package Process
Examining MySQL-client-5.1.73-1.glibc23.x86_64.rpm: MySQL-client-5.1.73-1.glibc23.x86_64
Marking MySQL-client-5.1.73-1.glibc23.x86_64.rpm to be installed
Loading mirror speeds from cached hostfile
 * base: ftp.riken.jp
 * epel: ftp.jaist.ac.jp
 * extras: ftp.riken.jp
 * updates: ftp.riken.jp
Examining MySQL-devel-5.1.73-1.glibc23.x86_64.rpm: MySQL-devel-5.1.73-1.glibc23.x86_64
Marking MySQL-devel-5.1.73-1.glibc23.x86_64.rpm to be installed
Examining MySQL-server-5.1.73-1.glibc23.x86_64.rpm: MySQL-server-5.1.73-1.glibc23.x86_64
Marking MySQL-server-5.1.73-1.glibc23.x86_64.rpm to be installed
Examining MySQL-shared-compat-5.1.73-1.glibc23.x86_64.rpm: MySQL-shared-compat-5.1.73-1.glibc23.x86_64
Marking MySQL-shared-compat-5.1.73-1.glibc23.x86_64.rpm to be installed
Resolving Dependencies
--> Running transaction check
---> Package MySQL-client.x86_64 0:5.1.73-1.glibc23 will be installed
---> Package MySQL-devel.x86_64 0:5.1.73-1.glibc23 will be installed
---> Package MySQL-server.x86_64 0:5.1.73-1.glibc23 will be installed
---> Package MySQL-shared-compat.x86_64 0:5.1.73-1.glibc23 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

=============================================================================================================================================================
 Package                            Arch                  Version                          Repository                                                   Size
=============================================================================================================================================================
Installing:
 MySQL-client                       x86_64                5.1.73-1.glibc23                 /MySQL-client-5.1.73-1.glibc23.x86_64                        16 M
 MySQL-devel                        x86_64                5.1.73-1.glibc23                 /MySQL-devel-5.1.73-1.glibc23.x86_64                         30 M
 MySQL-server                       x86_64                5.1.73-1.glibc23                 /MySQL-server-5.1.73-1.glibc23.x86_64                        38 M
 MySQL-shared-compat                x86_64                5.1.73-1.glibc23                 /MySQL-shared-compat-5.1.73-1.glibc23.x86_64                7.0 M

Transaction Summary
=============================================================================================================================================================
Install       4 Package(s)

Total size: 91 M
Installed size: 91 M
Is this ok [y/N]: y
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : MySQL-client-5.1.73-1.glibc23.x86_64                                                                                                      1/4 
  Installing : MySQL-server-5.1.73-1.glibc23.x86_64                                                                                                      2/4 
  Installing : MySQL-devel-5.1.73-1.glibc23.x86_64                                                                                                       3/4 
  Installing : MySQL-shared-compat-5.1.73-1.glibc23.x86_64                                                                                               4/4 
  Verifying  : MySQL-shared-compat-5.1.73-1.glibc23.x86_64                                                                                               1/4 
  Verifying  : MySQL-devel-5.1.73-1.glibc23.x86_64                                                                                                       2/4 
  Verifying  : MySQL-server-5.1.73-1.glibc23.x86_64                                                                                                      3/4 
  Verifying  : MySQL-client-5.1.73-1.glibc23.x86_64                                                                                                      4/4 

Installed:
  MySQL-client.x86_64 0:5.1.73-1.glibc23                   MySQL-devel.x86_64 0:5.1.73-1.glibc23            MySQL-server.x86_64 0:5.1.73-1.glibc23           
  MySQL-shared-compat.x86_64 0:5.1.73-1.glibc23           

Complete!

■既存の残骸が無いように消しておく

# cd /var/lib/mysql/
# pwd
/var/lib/mysql
# rm -rf ./*

■「mysql_install_db」コマンド実行

# mysql_install_db --datadir=/var/lib/mysql --user=mysql
WARNING: The host 'vagrant-centos65.vagrantup.com' could not be looked up with resolveip.
This probably means that your libc libraries are not 100 % compatible
with this binary MySQL version. The MySQL daemon, mysqld, should work
normally with the exception that host name resolving will not work.
This means that you should use IP addresses instead of hostnames
when specifying MySQL privileges !
Installing MySQL system tables...
OK
Filling help tables...
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:

/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h vagrant-centos65.vagrantup.com password 'new-password'

Alternatively you can run:
/usr/bin/mysql_secure_installation

which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.

See the manual for more instructions.

You can start the MySQL daemon with:
cd / ; /usr/bin/mysqld_safe &

You can test the MySQL daemon with mysql-test-run.pl
cd //mysql-test ; perl mysql-test-run.pl

Please report any problems with the /usr/bin/mysqlbug script!

■起動

# service mysql start

■パスワード設定

# /usr/bin/mysqladmin -u root password 'パスワード'

■「mysql_secure_installation」コマンドを実行

# /usr/bin/mysql_secure_installation

■mysqlに接続してざっくり設定する。(ローカル用)

mysql> select user, host from mysql.user;
mysql> grant all privileges on *.* to root@'192.168.%' identified by 'パスワード';
mysql> flush privileges;

■文字コードとか設定する
ゴニョゴニョ。
バージョンによる。

■設定変えたので再起動

# service mysql restart

■サービスに登録する

■参考URL

http://www.torutk.com/projects/swe/wiki/CentOS_6%E3%81%A7MySQL_56%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB
http://blog.r-unit.co.jp/archives/964
http://d.hatena.ne.jp/tetsuyai/20110418/1303133792
http://qiita.com/840_/items/06f32fecbe57c3fdf5ec
http://www.infoscoop.org/blogjp/2012/04/18/mysql5-5/

Fatal error: Can’t open and lock privilege tables: Table ‘mysql.host’ doesn’t exist


http://d.hatena.ne.jp/tomoyamkung/20081225/1230165109
http://dev.mysql.com/doc/refman/5.1/ja/mysql-install-db.html

MySQL:”ERROR 1033 (HY000): Incorrect information in file:”

MySQL:”ERROR 1033 (HY000): Incorrect information in file:”

MySQLのメモリ関係のパラメータで
「innodb_buffer_pool_size」の変更にあわせて
「innodb_log_file_size」を変更してMySQLを再起動したら
“ERROR 1033 (HY000): Incorrect information in file:”
が出た。

参考URLの内容そのままだけど、

/var/lib/mysql/ib_logfile0
/var/lib/mysql/ib_logfile1

↑とかのトランザクションログっぽいファイルを退避して
それからMySQLを再起動すれば直る。(パスは設定による)

※innoDB系のメモリのデフォルト値は以下

mysql> SHOW VARIABLES LIKE “innodb_%_size”;
+———————————+———+
| Variable_name | Value |
+———————————+———+
| innodb_additional_mem_pool_size | 1048576 |
| innodb_buffer_pool_size | 8388608 |
| innodb_log_buffer_size | 1048576 |
| innodb_log_file_size | 5242880 |
+———————————+———+

■参考URL
shin3tky blog:MySQL の innodb_log_file_size の調整

kakakikikekeのブログ:ERROR 1033 (HY000): Incorrect information in file

初心者のプログラムメモ:mysql ERROR 1033 (HY000): Incorrect information in file:

Before Today:MySQL|mysql ERROR 1033 (HY000): Incorrect information in file:

【MySQL】 Illegal mix of collations (utf8_general_ci,COERCIBLE) and (latin1_swedish_ci,NUMERIC) for operation ‘like’

mysql5.0の環境で動いていたものをmysql5.5の環境に移行したら以下のような
エラーが発生した。。

General error: 1267 Illegal mix of collations (utf8_general_ci,COERCIBLE) and (latin1_swedish_ci,NUMERIC) for operation ‘like’

このエラーは(utf8_general_ci,COERCIBLE)がサーバ側のコード
(latin1_swedish_ci,NUMERIC)がクライアント側のコード
ということらしい。
文字コードが違うからlikeで調べられないよっていうことっぽい?

よくわからないので参考URLなどをもとに調査。

クライアント側の文字コードをプログラムで調べるとASCIIになっていたので、
UTF-8に変換するのか?とか思ってやってみるもASCIIで取り扱われる。。

そもそもutf8_general_ciとなっているサーバ側のカラムはDATE型。
DATE型にUTF-8とかあるのかよくわからない。
型の問題なのかと思ってとりあえずカラムを文字列型に変更。

ALTER TABLE `テーブル` CHANGE COLUMN `対象カラム` `対象カラム` VARCHAR(10) NOT NULL  ;

カラム側を文字列に変換したらエラーが無くなった。

でもカラムの意味としてはDATEが正しいのでカラム型を変換するのは気持ち悪い・・・。
さらに調査。。その後以下のページを発見。

Illegal Mix Of Collations While Comparing Datetime with String

selectするときにデータベース側の列をDATE_FORMATで変換してあげればいいということらしい。

とりあえず動いた!

「llegal mix of collations」のエラーは色々な原因が
考えられるややこしい問題なんだということがわかった。

■参考URL

mysql の utf8_general_ci と utf8_unicode_ci の混在でエラー

Illegal mix of collations:ほんとに漢字コードの問題はややこしい ・・・ 【MySQL】

migrateでInnoDBの文字コードをutf8に

ω・)。○(思いつき広場 Illegal mix of collations

MYSQLへの接続を永久UTF8化:Illegal mix of collations

concrete5の検索ブロックで mysql error: Illegal mix of collations for operation ‘like’

Illegal Mix Of Collations While Comparing Datetime with String

MySQL DATE_FORMAT(date,format)

PDOでPDO::__construct(): [2002] No such file or directory … エラー

mac book air で homebrew を使ってmysqlをインストールしたけど
PDOで接続する時に以下のエラーに遭遇した。

PDO::__construct(): [2002] No such file or directory (trying to connect via unix:///tmp/mysql.sock) in …

どうもPHPが利用するUNIXソケットが見つからないということらしい。

自分の環境のUNIXソケットの位置がわからない。。。。

しばらく悩むもmysql.sockの位置の調べ方は結局以下のコマンドを叩くだけでよかった。。

$ mysqladmin version

自分の環境では「/tmp/mysql.sock」だった。
位置がわかったので、今回はとりあえずphp.iniの
pdo_mysql.default_socketを修正したら動いた。

pdo_mysql.default_socket=/tmp/mysql.sock

■参考URL
[symfony2][mac]データベース関連のコンソールでエラー

Warning Error: PDO::__construct(): [2002] No such file or directory・・・

mysqlのバイナリログの設定とバイナリログを見るコマンドメモ

mysqlのバイナリログの設定とバイナリログを見るコマンドメモ

設定してるくせによく忘れるので。

my.cnfの設定
■バイナリログを有効にする

[mysqld]
#バイナリログ有効化
log-bin=mysql-bin

mysqlの再起動する。

どこに出力されてるのか?

# pwd
/var/lib/mysql
# ls -al | grep mysql-bin
-rw-rw----   1 mysql mysql    19791 11月 21 17:22 2012 mysql-bin.000001
-rw-rw----   1 mysql mysql   744930 11月 21 17:22 2012 mysql-bin.000002
-rw-rw----   1 mysql mysql      441 11月 21 17:24 2012 mysql-bin.000003
-rw-rw----   1 mysql mysql   335058 11月 27 17:27 2012 mysql-bin.000004
-rw-rw----   1 mysql mysql      106 11月 27 17:27 2012 mysql-bin.000005
-rw-rw----   1 mysql mysql       95 11月 27 17:27 2012 mysql-bin.index

こんな感じでファイルに出る。

# mysqlbinlog mysql-bin.000005
mysqlbinlog: unknown variable 'default-character-set=utf8'

こんなエラーがでたら。。

# mysqlbinlog --no-defaults mysql-bin.000005

とするといいみたい。
これはmy.cnf の [client] セクションに default-character-set があるのが問題らしいです。

■クエリログを有効にする

[mysqld]
#クエリログ設定
log=/var/lib/mysql/mysql_querry.log

mysqlの再起動する。

どこに出力されてるのか?(指定してるけど・・・)

# pwd
/var/lib/mysql
# ls -al | grep mysql_querry
-rw-rw----   1 mysql mysql   156836 11月 27 17:41 2012 mysql_querry.log

本番運用する場合はログの容量が大きくなるのでクエリログは
出力しないほうがいいみたい。あくまでデバッグ用で。

■参考サイト
MySQLバイナリログの仕様

7.10. mysqlbinlog — バイナリログファイルを処理するためのユーティリティ

MySQLとログ

Subject: [mysql 12904] Re: mysqlbinlogの動作について

あー鼻水止まらない。のど痛い。

PDOでmysqlに接続する時の文字コード

久しぶりにメモ。

開発環境でPDOからmysqlにつないでデータを入れたりしてたのに
本番サーバに設置した途端にプログラムから入れたデータが文字化けした。

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     | utf8                       | 
| character_set_system     | utf8                       | 
| character_sets_dir       | /usr/share/mysql/charsets/ | 
+--------------------------+----------------------------+
8 rows in set (0.01 sec)

dbにつないで文字コードの設定をみてみたけど問題なかったので変だなーと。

で、以下のプログラムで確認。

$PDO=NULL;
try {
    $PDO=new PDO(
        sprintf('mysql:host=%s;dbname=%s','localhost','dbname'),'user','password',
        array(
            PDO::MYSQL_ATTR_READ_DEFAULT_FILE=>'/etc/my.cnf',
            PDO::MYSQL_ATTR_READ_DEFAULT_GROUP=>'client',
            PDO::ATTR_EMULATE_PREPARES=>'FALSE'));
    $PDO->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
} catch(PDOException $e) {
    var_dump($e->getMessage());
}

//$PDO->query("SET NAMES utf8");


$sth=$PDO->prepare("SHOW VARIABLES LIKE 'char%'");
$sth->execute();
while($ins=$sth->fetchObject()){
    echo $ins->Variable_name . " | " . $ins->Value . "\n";
}

開発環境での結果…

$ php connect_test.php
character_set_client | utf8
character_set_connection | utf8
character_set_database | utf8
character_set_filesystem | binary
character_set_results | utf8
character_set_server | utf8
character_set_system | utf8
character_sets_dir | /usr/share/mysql/charsets/

本番環境の結果…

$ php connect_test.php
character_set_client | latin1
character_set_connection | latin1
character_set_database | utf8
character_set_filesystem | binary
character_set_results | latin1
character_set_server | utf8
character_set_system | utf8

コレですね…

どうも開発環境では/etc/my.cnfに[client]に文字コードの
指定があったから上手くいってたけど、本番環境では
/etc/my.cnfに文字コードの設定がちゃんとされていないのが問題
だったみたい。

今回の本番環境は/etc/my.cnfを勝手に触れないので

$PDO->query("SET NAMES utf8");

で対応する。。

いろんな環境で動かすならSET NAMESはちゃんと書いておいたほうが良さそうですね。