20190307のMySQLに関する記事は5件です。

mtのインポートでエラーが出たお話。

古いMTの記事を新しいMTにお引越しがしたい。
mt5をmt7に移設するらしい。

移設先でmt7にバージョンアップしてからテンプレートの修正が入っていたのでさぁ大変。
バージョンが二つも古いのに無事にインポートできるのか!?
marcodiの挑戦が今始ま

インポートの途中でエラーが発生しました : 状態は正しくありません 。インポートファイルを確認してください。

 

Failed to execute INSERT INTO mt_entry (entry_allow_comments, entry_allow_pings, entry_atom_id, entry_author_id, entry_authored_on, entry_basename, entry_blog_id, entry_category_id, entry_class, entry_comment_count, entry_convert_breaks, entry_created_by, entry_created_on, entry_excerpt, entry_keywords, entry_modified_by, entry_modified_on, entry_ping_count, entry_pinged_urls, entry_status, entry_tangent_cache, entry_template_id, entry_text, entry_text_more, entry_title, entry_to_ping_urls, entry_unpublished_on, entry_week_number, entry_current_revision) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) with allow_comments, allow_pings, atom_id, author_id, authored_on, basename, blog_id, category_id, class, comment_count, convert_breaks, created_by, created_on, excerpt, keywords, modified_by, modified_on, ping_count, pinged_urls, status, tangent_cache, template_id, text, text_more, title, to_ping_urls, unpublished_on, week_number, current_revision: DBD::mysql::st execute failed: Incorrect string value: '\xF0\x9F\x99\x84</...' for column 'entry_text'

アッハイ

まず①について考える。

原因となる箇所を特定する

エクスポートしたファイルを開いて紐解く。

AUTHOR: foo
TITLE: ここにタイトル
BASENAME: foo_111
STATUS: 
ALLOW COMMENTS: 1
CONVERT BREAKS: __default__
ALLOW PINGS: 1
DATE: 10/19/2030 05:06:16 AM
-----
BODY:
ボディがお留守
-----
EXTENDED BODY:
ボディががら空き
-----
EXCERPT:

-----
KEYWORDS:

-----

COMMENT:
AUTHOR: comment_user
EMAIL: 
IP: 127.0.0.1
URL: 
DATE: 10/19/2030 06:06:16 AM
コメントがあればCOMMENT:~↓の-----まで
1コメントとして取り扱われる
-----

-----
--------

mt5ではこのブロックが何個も縦に連なった状態でエクスポートされます。

ではエラーが出た記事はどうなってるか。

AUTHOR: foo
TITLE: 
BASENAME: foo_111
STATUS: 
ALLOW COMMENTS: 1
CONVERT BREAKS: __default__
ALLOW PINGS: 1
DATE: 12/31/2012 11:42:45 PM
-----
BODY:

-----
EXTENDED BODY:

-----
EXCERPT:

-----
KEYWORDS:

-----


-----
--------

下書きを作ってすぐ放置されたものと思われる。

AUTHOR: foo
TITLE: 
BASENAME: foo_111
STATUS: Draft
ALLOW COMMENTS: 1
CONVERT BREAKS: richtext
ALLOW PINGS: 1
DATE: 12/31/2012 11:42:45 PM
-----
BODY:

-----
EXTENDED BODY:

-----
EXCERPT:

-----
KEYWORDS:

-----


-----
--------

mt7で下書きをエクスポートするとこの通り。
STATUSに値が入っていないないとエラーになります。
このあたりはバージョンアップで変わったのかもしれませんね。

原因解消にあたる

この下書きがいらないならそのブロックを消してしまってOK。
下書きを残す場合はSTATUS: Draftとしてしまうと良いでしょう。

まずはエディタで修正したインポートファイルを開き、改行コードをLFにする。
改行コードをLFにする。
改行コードをLFにする。
改行コードをLFにする。
改行コードが異なると正常に読み込んでくれません。

正規表現込みでgrepをかけて該当箇所を適宜解消していく

STATUS: \n

あとはインポートするだけ!

次に②

原因となる箇所を特定する

エラー文言からはインサートエラーであるのが伺えます。
インポートテキストから該当記事をみると

?

これ。

原因解消にあたる

今回MySqlでの作業になりますが、顔文字をデータベースに登録するには設定を変更する必要があって、
雑なんですが以下の記事がとても参考になります。

MySQL5.5で?絵文字?を挿入/検索する

以上、お役に立てましたら幸いです。

備考
最期までインポートしてるのにエラーの出るファイルがあるのナンデ???
→原因不明、そもそも改行コードを変えると正常に取り込まず終了する。。
凡ミスっぽいけどどうなんだろう

記事消す量が多いとtimeoutしちゃうナンデ????
→DB設定の変更で解決します

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MovableType7の記事インポートでエラーが出たお話。

古いMTの記事を新しいMTにお引越しがしたい。
mt5をmt7に移設するらしい。

移設先でmt7にバージョンアップしてからテンプレートの修正が入っていたのでさぁ大変。
バージョンが二つも古いのに無事にインポートできるのか!?
marcodiの挑戦が今始ま

インポートの途中でエラーが発生しました : 状態は正しくありません 。インポートファイルを確認してください。

 

Failed to execute INSERT INTO mt_entry (entry_allow_comments, entry_allow_pings, entry_atom_id, entry_author_id, entry_authored_on, entry_basename, entry_blog_id, entry_category_id, entry_class, entry_comment_count, entry_convert_breaks, entry_created_by, entry_created_on, entry_excerpt, entry_keywords, entry_modified_by, entry_modified_on, entry_ping_count, entry_pinged_urls, entry_status, entry_tangent_cache, entry_template_id, entry_text, entry_text_more, entry_title, entry_to_ping_urls, entry_unpublished_on, entry_week_number, entry_current_revision) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) with allow_comments, allow_pings, atom_id, author_id, authored_on, basename, blog_id, category_id, class, comment_count, convert_breaks, created_by, created_on, excerpt, keywords, modified_by, modified_on, ping_count, pinged_urls, status, tangent_cache, template_id, text, text_more, title, to_ping_urls, unpublished_on, week_number, current_revision: DBD::mysql::st execute failed: Incorrect string value: '\xF0\x9F\x99\x84</...' for column 'entry_text'

アッハイ

まず①について考える。

原因となる箇所を特定する

エクスポートしたファイルを開いて紐解く。

AUTHOR: foo
TITLE: くさなぎきょう
BASENAME: foo_111
STATUS: 
ALLOW COMMENTS: 1
CONVERT BREAKS: __default__
ALLOW PINGS: 1
DATE: 10/19/2030 05:06:16 AM
-----
BODY:
ボディがお留守
-----
EXTENDED BODY:
ボディががら空き
-----
EXCERPT:

-----
KEYWORDS:

-----

COMMENT:
AUTHOR: comment_user
EMAIL: 
IP: 127.0.0.1
URL: 
DATE: 10/19/2030 06:06:16 AM
コメントがあればCOMMENT:~↓の-----まで
1コメントとして取り扱われる
-----

-----
--------

mt5ではこのブロックが何個も縦に連なった状態でエクスポートされます。

ではエラーが出た記事はどうなってるか。

AUTHOR: foo
TITLE: 
BASENAME: foo_111
STATUS: 
ALLOW COMMENTS: 1
CONVERT BREAKS: __default__
ALLOW PINGS: 1
DATE: 12/31/2012 11:42:45 PM
-----
BODY:

-----
EXTENDED BODY:

-----
EXCERPT:

-----
KEYWORDS:

-----


-----
--------

下書きを作ってすぐ放置されたものと思われる。

AUTHOR: foo
TITLE: 
BASENAME: foo_111
STATUS: Draft
ALLOW COMMENTS: 1
CONVERT BREAKS: richtext
ALLOW PINGS: 1
DATE: 12/31/2012 11:42:45 PM
-----
BODY:

-----
EXTENDED BODY:

-----
EXCERPT:

-----
KEYWORDS:

-----


-----
--------

mt7で下書きをエクスポートするとこの通り。
STATUSに値が入っていないないとエラーになります。
このあたりはバージョンアップで変わったのかもしれませんね。

原因解消にあたる

この下書きがいらないならそのブロックを消してしまってOK。
下書きを残す場合はSTATUS: Draftとしてしまうと良いでしょう。

まずはエディタで修正したインポートファイルを開き、改行コードをLFにする。
改行コードをLFにする。
改行コードをLFにする。
改行コードをLFにする。
改行コードが異なると正常に読み込んでくれません。

正規表現込みでgrepをかけて該当箇所を適宜解消していく

STATUS: \n

あとはインポートするだけ!

次に②

原因となる箇所を特定する

エラー文言からはインサートエラーであるのが伺えます。
インポートテキストから該当記事をみると

?

これ。

原因解消にあたる

今回MySqlでの作業になりますが、顔文字をデータベースに登録するには設定を変更する必要あり。
雑な誘導ではありますが、以下の記事がとても参考になります。

MySQL5.5で?絵文字?を挿入/検索する

以上、お役に立てましたら幸いです。

備考
最期までインポートしてるのにエラーの出るファイルがあるのナンデ???
→原因不明、そもそも改行コードを変えると正常に取り込まず終了する。。
凡ミスっぽいけどどうなんだろう

記事消す量が多いとtimeoutしちゃうナンデ????
→DB設定の変更で解決します

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Azure Database for MySQL で稀によく遭遇する DBエラー

弊社のシステムはAzure Database for MySQLを使っています。
アプリケーションログを監視しているとたまにDBエラーがでているのが確認できます。

エラーのタイミングとして、いっつも出ているわけじゃないけど一度発生すると短時間に大量に出るという、まさに「稀によくある」状態です。

ググってヒットするエラーもあれば、全く他で見たことがないエラーもあるため、Qiitaの皆さんのなかに「それ原因知っているぜ!!」という方がいれば知見をいただきたく、もしくは困っている開発者同士の情報交換の場になればというのがこの記事の趣旨となります。
※並行してAzure調査チームにサービスリクエストを出しているので、そちらで原因がわかったものは追記する予定です。

SQLSTATE[HY000] [2006] MySQL server has gone away

このエラー自体はググっても見かけるやつです。
ただ、困ったことに数秒でエラーで返ってくることもあれば、数分、数時間後にやっとエラーが返ってくることもあるようです。
(実績があるログなので大丈夫だとは思いますが、たまに数日後にエラーが返ってくるものもあり、ちゃんとログ取れているのかは不安)

一般的には接続中のコネクションが切れた場合などに出るらしいですが、殆どが初期化処理の一番最初の接続時に出ているのでイマイチ原因がわかっていません。
PHPのシステムなので処理終了時に明示的なdisconnectをしていないのだけど、それが原因なのか?というのがありますが、まだ検証しきれていない状況です。

SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known

ググってみると単純な設定ミスらしいのですが、稼働中のシステムでぽつんと1件だけ発生したことがありました。
とはいえ過去1度しか見てないので今後起きない可能性もあります。

SQLSTATE[HY000] [9002] The server name you tried cannot be found. Please use the correct name and retry. Please check your server name [DBサーバ名].

こちらも1つ前と同じく過去1度しか見てないので今後起きない可能性もあります。

SQLSTATE[HY000] [9002] An error occurred when accessing your server. Please retry or report your issues.

ググってもよくわからず、現状お手上げ。(サービスリクエスト中)

SQLSTATE[HY000] [9002] Some errors occured.

ググってもよくわからず、現状お手上げ。
最近は起きておらず、次回発生したときに原因がわからなければサービスリクエストする予定です。

SQLSTATE[HY000] [9002] Server is not ready for incoming connections.

ググってもよくわからず、現状お手上げ。
こちらも最近は起きておらず、次回発生したときに原因がわからなければサービスリクエストする予定です。

SQLSTATE[HY000] [9999] An internal error has occurred. Please retry or report your issues.

これは以前発生したときにサービスリクエストを出したんですが、Azure側のログが流れてしまって原因究明には至りませんでした。
ただ、同時刻帯で内部サーバのメンテナンスが発生していたそうなので、その切替の間に発生していた可能性が今のところ濃厚。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Rubyで使用する各ツールの用途について

Rubyで活躍する代表的なツール

まずはツールの名前だけ先に上げていくことにします。
詳しくは以下でまとめていきますので一緒に確認していきましょう!

・Gem
・Ruby On Rails(gemの中の1つ)
・bundler
・sequel pro

Gemとは

Gemはライブラリの一種です。
Gemはどういった用途があるかというと、例えばとある機能を実装しようとした時に自分で1から実装しようとすると、かなりの労力と時間がかかってしまう可能性があるのですが、Gemではすでに他の誰かが開発済みの機能を借りて来ることができてしまうんです。

つまり、アプリ作成において自分で実装する部分を最小限に抑えることができるというかなりの優れものです。

Gemについての詳細はこちらを参考にしてみてください!
https://blog.codecamp.jp/rails-gem

Sequelproとは

次にSequelproについてですがこちらはGUIツールとよばれるものの1つです。
簡単にいうと、データベースにつなげるためのものです。
データベース(DB)はMySQLというものがよく知られています。

MySQLへの接続方法の詳細についてはこちらを参考にしてみてください!
https://qiita.com/iwaseasahi/items/e245e61da4b7613494c5

bundlerとは

bundlerとはGem同士の互換性を保ちながら、パッケージの種類やバージョンを管理してくれる仕組みを持つものです。
実はbundlerもGemの1つです。
このbundlerがないと以下のようなことが起きてしまい、動作がうまくいかない現象が多発してしまいます。

例えば、いくつもライブラリを使用している中でAのライブラリは最新の状態で保持されているが、ライブラリBは1つ前のバージョンであった場合に互換性の問題でうまく動作しない。

こういった現象が起きないように管理してくれるのがbundlerというわけです。
bundlerをインストールしておくだけで無意識にこういったことが原因で起きるエラーを回避できるということなんです。

インストールしておいて損はないので是非インストールしましょう!

インストールについては以下を参考にしてください!

https://www.sejuku.net/blog/19426

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Dockerfileのベースイメージをmysqlに指定した時に、sequel proに接続する方法

はじめに

Dckerfile

FROM mysql:5.7
docker-compose.yml
version: '3'
services:
  web:
    build:
      context: .
      dockerfile: ./Dockerfile
    volumes:
      - .:/data
    ports:
      - '3000:3000'
    environment:
      - MYSQL_ROOT_PASSWORD=password

ベースイメージをmysqlにしているときに
webアプリケーションにlocalhost:3000で接続でき、sequel proにも接続したい。

Sequel Proの接続情報
host: 127.0.0.1
user: root
pass: password
port: 3000

これで接続できると思っていたが、接続できなかった。

解決方法

アプリ側のポートに"3306"を追加する

docker-compose.yml
version: '3'
services:
  web:
    build:
      context: .
      dockerfile: ./Dockerfile
    volumes:
      - .:/data
    ports:
      - '3000:3000'
      - '3306:3306' # 追加
    environment:
      - MYSQL_ROOT_PASSWORD=password

Sequel Proの接続情報
host: 127.0.0.1
user: root
pass: password
port: 3306

これで接続できた。めでたし、めでたし。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む