phpMyAdminでCSVインポートを良く使うのですが、たとえばintのフィールドに空("")をいれようとすると
MySQL のメッセージ: ドキュメント
#1366 - Incorrect integer value: '' for column 'sample_number' at row 1
なんてエラーが出てインポートできません。
NULLといれておけばNULLで入るので解決するのですが
普通CSVといえばExcelなどでデータを作ってCSVファイルにしてインポートするわけで
空なんてざらにあるわけでして・・・
いちいちセルにNULLとかいれるのは本当に面倒です。
と思っていたら、空だったら自動でNULLをinsertする方法がありました。
CSVインポートの際に、「フォーマット特有のオプション:」にて
「INSERT エラーで中断しない」
にチェックをつけると、空値が入っていてもNULLでインポートしてくれます。
ただCSVファイルの行数はインポート前に把握しておいた方が良いですね。
※7/3追記
このオプションは例えば入れるべき値が1列ずれてたなどそういう致命的なミスがあった場合でも適宜0やNULLなどインポートできる値に置き換えていれてしまうので、ミスに気づきにくいです。
結局使わなかった・・・
2016年7月1日金曜日
2015年10月22日木曜日
MySQL 5.6 query_cache_typeをmy.cnfに設定したらエラー
MySQL 5.6 のメモリのチューニングをしていた際のハマりです。
query_cache_typeを設定していなかったので、起動中のMySQLを一旦止めて、my.cnfに下記を追記して再起動。
The server quit without updating PID file...
もうこれ見飽きた...
my.cnfにquery_cache_typeの設定をするとこのエラーが出てしまうのですが
記述に問題あるようにも見えなくて、実際、記述自体に問題はないわけです。
でもただ起動できないでどうしてエラーなのかさっぱりわからず
MySQLからset global を使って、グローバルでセットしてみるも
やはりエラー。(当たり前)
Query cache is disabled; restart the server with query_cache_type=1 to enable it
【結果】
query_cache_type は、設定/変更する際、ログファイルの削除が必要だったんです。
【手順】
クエリキャッシュを変更するときには
1.MySQL サービス停止
2.ib_logfile0、ib_logfile1を削除(不安だったらリネーム)
3.my.cnfを書き換え
4.MySQLサービス起動
という流れになります。
余談ですが、MySQLを再起動するとき、残っていたロックファイル(lock/subsys/mysql)を削除しようとしたのですが、killしてもkillしても復活してきたので潔くOSをrebootしました。
query_cache_typeを設定していなかったので、起動中のMySQLを一旦止めて、my.cnfに下記を追記して再起動。
query_cache_limit = 16M query_cache_size = 512M query_cache_type = 1するとエラー。
The server quit without updating PID file...
もうこれ見飽きた...
my.cnfにquery_cache_typeの設定をするとこのエラーが出てしまうのですが
記述に問題あるようにも見えなくて、実際、記述自体に問題はないわけです。
でもただ起動できないでどうしてエラーなのかさっぱりわからず
MySQLからset global を使って、グローバルでセットしてみるも
やはりエラー。(当たり前)
Query cache is disabled; restart the server with query_cache_type=1 to enable it
【結果】
query_cache_type は、設定/変更する際、ログファイルの削除が必要だったんです。
【手順】
クエリキャッシュを変更するときには
1.MySQL サービス停止
2.ib_logfile0、ib_logfile1を削除(不安だったらリネーム)
3.my.cnfを書き換え
4.MySQLサービス起動
という流れになります。
余談ですが、MySQLを再起動するとき、残っていたロックファイル(lock/subsys/mysql)を削除しようとしたのですが、killしてもkillしても復活してきたので潔くOSをrebootしました。
2015年9月10日木曜日
MySQL 5.6で Assertion failure in thread
■現象
my.cnfにquery_cacheの設定を追記してmysqlを再起動したら起動に失敗
追記した部分↓(問題あり?)
○/var/mysql/logs/error.log
エラーメッセージでググッてみると、「MySQLがクラッシュした」という記事ばかりで青くなりました。
不用意に再起動した自分を呪いつつ、設定ファイルを変えたタイミングだったわけでまずはそちらを確認。
結果、上述したmy.cnfの記述に問題があったようなのですが。
なにが悪かったのか良くわからず・・・query_cacheの記述が違うのかもしれません。
これについてはまたきちんと原因を調べるとして、起動までにやったことを残しておきます。
リカバリーはしなくて済みました。
■やったこと
○my.cnfの上記をコメントアウトして再起動
→下記エラーで起動せず
○起動に失敗したときに残ってしまったプロセスを確認
○mysqlが起動しているmysqldをkill
○再起動前に念のためステータス確認するとロックファイルがあったのでそれをリネーム(削除でもいいと思います)
○再起動
★教訓
稼働中のDBを不用意に設定変更・再起動しない
my.cnfをいじるときはかならず確実な情報をもとに編集・再起動
クラッシュを疑う前に胸に手をあてて自分の行動を鑑み、小さな部分から対応を潰していく
★Tips
mysql強制起動オプション(my.cnfに追記する)
innodb_force_recovery = 3
※1~6まで指定できて、1が一番やさしい強制。通常は1から順番に設定しながら起動確認していくようです。
my.cnfにquery_cacheの設定を追記してmysqlを再起動したら起動に失敗
追記した部分↓(問題あり?)
query_cache_limit = 16M query_cache_size = 512M query_cache_type = 1■エラーログ確認
○/var/mysql/logs/error.log
2015-09-08 20:02:41 7f9721e4e720 InnoDB: Assertion failure in thread 140287085438752 in file ut0mem.cc line 105 InnoDB: Failing assertion: ret || !assert_on_error InnoDB: We intentionally generate a memory trap. InnoDB: Submit a detailed bug report to http://bugs.mysql.com. InnoDB: If you get repeated assertion failures or crashes, even InnoDB: immediately after the mysqld startup, there may be InnoDB: corruption in the InnoDB tablespace. Please refer to InnoDB: http://dev.mysql.com/doc/refman/5.6/en/forcing-innodb-recovery.html InnoDB: about forcing recovery. 11:02:41 UTC - mysqld got signal 6 ; This could be because you hit a bug. It is also possible that this binary or one of the libraries it was linked against is corrupt, improperly built, or misconfigured. This error can also be caused by malfunctioning hardware. We will try our best to scrape up some info that will hopefully help diagnose the problem, but since we have already crashed, something is definitely wrong and this may fail. key_buffer_size=8388608 read_buffer_size=131072 max_used_connections=0 max_threads=151 thread_count=0 connection_count=0 It is possible that mysqld could use up to key_buffer_size + (read_buffer_size + sort_buffer_size)*max_threads = 68241 K bytes of memory Hope that's ok; if not, decrease some variables in the equation. Thread pointer: 0x0 Attempting backtrace. You can use the following information to find out where mysqld died. If you see no messages after this, something went terribly wrong... stack_bottom = 0 thread_stack 0x40000 /usr/local/mysql/bin/mysqld(my_print_stacktrace+0x35)[0x8e1b75] /usr/local/mysql/bin/mysqld(handle_fatal_signal+0x41b)[0x650a1b] /lib64/libpthread.so.0[0x37bd00f4a0] /lib64/libc.so.6(gsignal+0x35)[0x37bcc32885] /lib64/libc.so.6(abort+0x175)[0x37bcc34065] /usr/local/mysql/bin/mysqld[0xa2b557] /usr/local/mysql/bin/mysqld[0xaafb60] /usr/local/mysql/bin/mysqld[0xaae7f6] /usr/local/mysql/bin/mysqld[0xa4f0ee] /usr/local/mysql/bin/mysqld[0xa5c9cf] /usr/local/mysql/bin/mysqld[0xa09f6f] /usr/local/mysql/bin/mysqld[0x95a7f7] /usr/local/mysql/bin/mysqld(_Z24ha_initialize_handlertonP13st_plugin_int+0x48)[0x58d388] /usr/local/mysql/bin/mysqld[0x6e1f86] /usr/local/mysql/bin/mysqld(_Z11plugin_initPiPPci+0xb3e)[0x6e567e] /usr/local/mysql/bin/mysqld[0x580905] /usr/local/mysql/bin/mysqld(_Z11mysqld_mainiPPc+0x4d8)[0x585898] /lib64/libc.so.6(__libc_start_main+0xfd)[0x37bcc1ecdd] /usr/local/mysql/bin/mysqld[0x577bdd] The manual page at http://dev.mysql.com/doc/mysql/en/crashing.html contains information that should help you find out what is causing the crash.crash(;゚Д゚)!?
エラーメッセージでググッてみると、「MySQLがクラッシュした」という記事ばかりで青くなりました。
不用意に再起動した自分を呪いつつ、設定ファイルを変えたタイミングだったわけでまずはそちらを確認。
結果、上述したmy.cnfの記述に問題があったようなのですが。
なにが悪かったのか良くわからず・・・query_cacheの記述が違うのかもしれません。
これについてはまたきちんと原因を調べるとして、起動までにやったことを残しておきます。
リカバリーはしなくて済みました。
■やったこと
○my.cnfの上記をコメントアウトして再起動
→下記エラーで起動せず
[root@dev init.d]# ./mysql.server start Starting MySQL. ERROR! The server quit without updating PID file (/var/mysql/data/dev.xxxxxx-xxx.net.pid).上記エラーをスタンダードな手順での解消を試みます。
○起動に失敗したときに残ってしまったプロセスを確認
[root@dev logs]# ps aux | grep mysql root 24734 0.0 0.0 106152 1384 pts/0 S 20:02 0:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock - mysql 24805 0.0 0.1 261160 21736 pts/0 Sl 20:02 0:00 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --log-error=/var/et=/var/lib/mysql/mysql.sock root 28203 0.0 0.0 107516 940 pts/0 S+ 21:20 0:00 grep mysql
○mysqlが起動しているmysqldをkill
[root@dev logs]# kill 24805 [root@dev logs]# ps aux | grep mysql root 28207 0.0 0.0 107516 944 pts/0 S+ 21:20 0:00 grep mysql
○再起動前に念のためステータス確認するとロックファイルがあったのでそれをリネーム(削除でもいいと思います)
[root@dev logs]# /etc/rc.d/init.d/mysql.server status ERROR! MySQL is not running, but lock file (/var/lock/subsys/mysql) exists [root@dev logs]# cd /var/lock/subsys [root@dev subsys]# mv mysql _mysql
○再起動
[root@dev subsys]# /etc/rc.d/init.d/mysql.server start Starting MySQL.. SUCCESS!
★教訓
稼働中のDBを不用意に設定変更・再起動しない
my.cnfをいじるときはかならず確実な情報をもとに編集・再起動
クラッシュを疑う前に胸に手をあてて自分の行動を鑑み、小さな部分から対応を潰していく
★Tips
mysql強制起動オプション(my.cnfに追記する)
innodb_force_recovery = 3
※1~6まで指定できて、1が一番やさしい強制。通常は1から順番に設定しながら起動確認していくようです。
登録:
投稿 (Atom)