「MySQL」カテゴリーアーカイブ
ユーザ名等の識別子の長さの制限
MySQLのユーザ名の長さは最大16文字。
MySQL ユーザ名には、最大 16 文字まで使用できます。これは、MySQL のサーバとクライアントでハードコード (決め打ち) しています。mysql データベースのテーブル定義を変更するなどして、この文字制限を回避しないでください。
MySQL :: MySQL 5.1 リファレンスマニュアル :: 4.8.1 MySQL ユーザ名とパスワード
一方、データベース名、テーブル名、カラム名など識別子の長さの最大値は以下の通り。(バイト数)
- データベース 64
- テーブル 64
- カラム 64
- インデックス 64
- エイリアス 255(MySQL 5.6以降は256)
You can't specify target table 'xxx' for update in FROM clause
MySQLでは、サブクエリ FROM 節と更新対象の両方に同じテーブルを使用することはでき
ない。
Source: MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.2.8.9 サブクエリ エラー
mysql> delete from user \ -> where user.id in \ -> (select user.id from user \ -> left join reserve_data on user.id = reserve_data.user_id where reserve_data.id is null); ERROR 1093 (HY000): You can't specify target table 'user' for update in FROM clause
このような場合は、以下のようにする。
mysql> delete from user \ -> where user.id in \ -> (select x.id from \ -> (select user.id from user left join reserve_data on user.id = reserve_data.user_id where reserve_data.id is null) \ -> as x \ -> ); Query OK, 350 rows affected (0.00 sec)
こうすると、暗黙的に一時テーブルが作成されるので、うまくいく。
Source: SQL Delete: can't specify target table for update in FROM clause - Stack Overflow
クエリログを取得する
- /etc/my.cnf に以下の記述を追加。
- MySQL 5.0まで
[mysqld] log=/var/log/mysqlquery.log
- MySQL5.1以降
[mysqld] general_log=1 general_log_file=/var/log/mysqlquery.log
- MySQL 5.0まで
- 空のログファイルを作成し、パーミッションを設定後、mysqldを再起動する。
# touch /var/log/mysqlquery.log # chown mysql:mysql mysqlquery.log # chmod 640 mysqlquery.log # service mysqld restart
- ログをクリアする場合は、
# :> /var/log/mysqlquery.log
MacPortsでMySQL5をインストール
$ sudo port install mysql5 +server ---> Fetching mysql5 ---> Verifying checksum(s) for mysql5 ---> Extracting mysql5 ---> Configuring mysql5 ---> Building mysql5 with target all ---> Staging mysql5 into destroot ---> Creating launchd control script ########################################################### # A startup item has been generated that will aid in # starting mysql5 with launchd. It is disabled # by default. Execute the following command to start it, # and to cause it to launch at startup: # # sudo launchctl load -w /Library/LaunchDaemons/org.macports.mysql5.plist ########################################################### ---> Installing mysql5 5.0.67_0+server ****************************************************** * In order to setup the database, you might want to run * sudo -u mysql mysql_install_db5 * if this is a new install ****************************************************** ---> Activating mysql5 5.0.67_0+server ---> Cleaning mysql5
自動起動を設定。
$ sudo launchctl load -w /Library/LaunchDaemons/org.macports.mysql5.plist
mysql データベースを設定。
$ sudo -u mysql mysql_install_db5 Installing MySQL system tables... 080902 12:32:58 [Warning] option 'max_join_size': unsigned value 18446744073709551615 adjusted to 4294967295 080902 12:32:58 [Warning] option 'max_join_size': unsigned value 18446744073709551615 adjusted to 4294967295 080902 12:32:58 [Warning] Setting lower_case_table_names=2 because file system for /opt/local/var/db/mysql5/ is case insensitive OK Filling help tables... 080902 12:32:58 [Warning] option 'max_join_size': unsigned value 18446744073709551615 adjusted to 4294967295 080902 12:32:58 [Warning] option 'max_join_size': unsigned value 18446744073709551615 adjusted to 4294967295 080902 12:32:58 [Warning] Setting lower_case_table_names=2 because file system for /opt/local/var/db/mysql5/ is case insensitive 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: /opt/local/lib/mysql5/bin/mysqladmin -u root password 'new-password' /opt/local/lib/mysql5/bin/mysqladmin -u root -h macbook.local password 'new-password' Alternatively you can run: /opt/local/lib/mysql5/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 /opt/local ; /opt/local/lib/mysql5/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 /opt/local/lib/mysql5/bin/mysqlbug script! The latest information about MySQL is available on the web at http://www.mysql.com Support MySQL by buying support/licenses at http://shop.mysql.com
rootユーザのパスワード設定や匿名アカウント、testデータベースの削除などが以下で実行されるらしい。
$ /opt/local/lib/mysql5/bin/mysql_secure_installation
しかし、実行してみたが、匿名アカウントもtestデータベースも残っていたので、
MySQL :: MySQL 5.1 リファレンスマニュアル :: 2.10.3 最初の MySQL アカウントの確保
を参考に、自分でやる。
mysqlコマンドや、rubyのmysqlアダプタをインストールするときにオプションで指定するmysql-configへのパスを通すため、.bash_profileなどで$PATHに
/opt/local/lib/mysql5/bin
を追加しておく。
gem install mysql でエラー
CentOS5.1にgemでrubyのMySQL API をインストールした。
$ sudo gem install mysql Password: Building native extensions. This could take a while... ERROR: Error installing mysql: ERROR: Failed to build gem native extension. /usr/local/bin/ruby extconf.rb install mysql checking for mysql_query() in -lmysqlclient... no checking for main() in -lm... yes checking for mysql_query() in -lmysqlclient... no checking for main() in -lz... yes checking for mysql_query() in -lmysqlclient... no checking for main() in -lsocket... no checking for mysql_query() in -lmysqlclient... no checking for main() in -lnsl... yes checking for mysql_query() in -lmysqlclient... no *** extconf.rb failed *** Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers. Check the mkmf.log file for more details. You may need configuration options. Provided configuration options: --with-opt-dir --without-opt-dir --with-opt-include --without-opt-include=${opt-dir}/include --with-opt-lib --without-opt-lib=${opt-dir}/lib --with-make-prog --without-make-prog --srcdir=. --curdir --ruby=/usr/local/bin/ruby --with-mysql-config --without-mysql-config --with-mysql-dir --without-mysql-dir --with-mysql-include --without-mysql-include=${mysql-dir}/include --with-mysql-lib --without-mysql-lib=${mysql-dir}/lib --with-mysqlclientlib --without-mysqlclientlib --with-mlib --without-mlib --with-mysqlclientlib --without-mysqlclientlib --with-zlib --without-zlib --with-mysqlclientlib --without-mysqlclientlib --with-socketlib --without-socketlib --with-mysqlclientlib --without-mysqlclientlib --with-nsllib --without-nsllib --with-mysqlclientlib --without-mysqlclientlib Gem files will remain installed in /usr/local/lib/ruby/gems/1.8/gems/mysql-2.7 for inspection. Results logged to /usr/local/lib/ruby/gems/1.8/gems/mysql-2.7/gem_make.out
MySQL/Rubyを参考にして、--with-mysql-configオプションをつけてみた。
$ sudo gem install mysql --with-mysql-config ERROR: While executing gem ... (OptionParser::InvalidOption) invalid option: --with-mysql-config
オプションのつけ方間違えた。
$ sudo gem install mysql -- --with-mysql-config Building native extensions. This could take a while... ERROR: Error installing mysql: ERROR: Failed to build gem native extension. /usr/local/bin/ruby extconf.rb install mysql -- --with-mysql-config checking for mysql_ssl_set()... no checking for mysql.h... no checking for mysql/mysql.h... no *** extconf.rb failed *** Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers. Check the mkmf.log file for more details. You may need configuration options. Provided configuration options: --with-opt-dir --without-opt-dir --with-opt-include --without-opt-include=${opt-dir}/include --with-opt-lib --without-opt-lib=${opt-dir}/lib --with-make-prog --without-make-prog --srcdir=. --curdir --ruby=/usr/local/bin/ruby --with-mysql-config Gem files will remain installed in /usr/local/lib/ruby/gems/1.8/gems/mysql-2.7 for inspection. Results logged to /usr/local/lib/ruby/gems/1.8/gems/mysql-2.7/gem_make.out
mysql-develをインストールする。
$ sudo yum install mysql-devel
改めてインストール。
$ sudo gem install mysql -- --with-mysql-config Building native extensions. This could take a while... Successfully installed mysql-2.7 1 gem installed
OK。
MAMPの環境にrubyのMySQLアダプタをインストールする
MAMPの環境でgem install mysqlを実行すると、以下のエラーになる。
$ sudo gem install mysql Building native extensions. This could take a while... ERROR: Error installing mysql: ERROR: Failed to build gem native extension. /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby extconf.rb install mysql checking for mysql_query() in -lmysqlclient... no checking for main() in -lm... yes checking for mysql_query() in -lmysqlclient... no checking for main() in -lz... yes checking for mysql_query() in -lmysqlclient... no checking for main() in -lsocket... no checking for mysql_query() in -lmysqlclient... no checking for main() in -lnsl... no checking for mysql_query() in -lmysqlclient... no Gem files will remain installed in /Library/Ruby/Gems/1.8/gems/mysql-2.7 for inspection. Results logged to /Library/Ruby/Gems/1.8/gems/mysql-2.7/gem_make.out
MAMPのmysqlは、ヘッダファイル、ライブラリがデフォルトの/usr/local/lib、/usr/local/includeにないので、オプションを指定する必要がある。オプションはいろいろあるが、--with-mysql-configを使うと便利。
MySQL/Ruby
--with-mysql-config[=/path/to/mysql_config] mysql_config コマンドの結果からコンパイルパラメータを得ます。
mysql_config コマンドにパスが通るように、.bash_profileなどで、PATHにMAMPのディレクトリを追加しておくか、--with-mysql-config=/Applications/MAMP/Library/bin/mysql_configを指定する。
ここでは、PATHを設定します。
export PATH=/Applications/MAMP/Library/bin:/Applications/MAMP/bin/php5/bin:/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin:$PATH
再度、インストール。
$ sudo gem install mysql -- --with-mysql-config Building native extensions. This could take a while...Successfully installed mysql-2.7 1 gem installed
OK。
MySQLのドキュメント作成「mysqldoc」
最初の MySQL アカウントの確保
MySQL :: MySQL 5.1 リファレンスマニュアル :: 2.10.3 最初の MySQL アカウントの確保
MySQLをインストールしたら、まず匿名アカウントを削除して、rootアカウントにパスワードを設定する。(最初の root アカウントパスワードは空)
匿名アカウントの削除
$ mysql -u root Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 26 Server version: 5.0.85 Source distribution Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> DELETE FROM mysql.user WHERE User = ''; Query OK, 2 rows affected (0.00 sec) mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec)
root アカウントのパスワードの割り当て
$ mysql -u root Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 27 Server version: 5.0.85 Source distribution Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpwd'); Query OK, 0 rows affected (0.00 sec) mysql> SET PASSWORD FOR 'root'@'hostname' = PASSWORD('newpwd'); Query OK, 0 rows affected (0.00 sec) mysql> SET PASSWORD FOR 'root'@'127.0.0.1' = PASSWORD('newpwd'); Query OK, 0 rows affected (0.00 sec)
hostnameはmysql.userテーブルをselectして確認する。
便利なGUIのMySQLフロントエンド「Navicat for MySQL Lite」
http://www.moongift.jp/2008/02/navicat_for_mysql_lite/
sshでリモート接続できるのが便利。