見出し画像

データベース更新(MySQL8.0へ):エラー(#1044)をなんとかできた話

WordPressでデータベースの更新を促されたので、2年ぶりぐらいに更新することにしました。(*MySQL5.7→8.0への更新)2年前のメモをみたら2、3時間でできるって自分で書いていました。
ところが実際はエラーのせいで4、5時間はかかったんじゃないかな?.sqlファイルを新しいデータベースへインポートしたときにエラーが出ました。
大体データベースを更新してインポートするとエラーが出てるような気がするんだけど気のせいかな?前回もそうだったような???

2年前のデータベースの更新時も何がなんだかさっぱりわからずに、親切な方々がブログに書いてくれているのを色々と参考にしながら更新しました。今回のエラーも先人たちのブログを参考に修正してサクッと終わらせようと思ってたのに、今回は残念ながらどうやっても直りませんでした。しばらく古いままでいいかと諦めかけた時に、適当にやったことがうまくいったので、一応記録として残しておこうと思います。

ただ、必ずしもうまくいくとは限らないことと、データベースのことなんてほとんど分かってない超素人✨が書いているということを前提に読んでください。私もなぜそれでエラーが出なくなったのかはさっぱりよくわかっていません。時間ができたら勉強したいところです。ん?するかな?私
 2日経った今でもとりあえず不具合は起きていないし、WordPressのサイトヘルスでもデータベースが古いって言われなくなったし、セキュリティ系のプラグインでもデータベースがMySQL8.0と書かれていたので、おそらくもう大丈夫なんだと思っています。


この記事を見ているということは、おそらくデータベースの更新は途中まではされていると思うので、ここではデータベースの更新方法は書かずに、今回出たエラーの対処方法だけ記載しておくことにします。
 今回私が出したエラーは #1044 です。
古いデータベース(AAA12345-sampleold)からエクスポートした.sqlファイルを新しいデータベース(AAA12345-samplenew)へインポートした時に出ました。
実際のエラー画面はこちら↓
(データベース名やサーバーはすべてダミーです)

<データベースインポート時の#1044エラー画面>

ピンク色でかなりやばそうな感じを出してくるのは、ホントやめてほしいです。一瞬で壊れたんじゃないかって思ってしまいました。私の心臓にだいぶ悪いので、優しめの表示を考えてほしいです。

#1044エラーに関しては、
エクスポートした.sqlファイルをテキストエディットで開くと次のように書かれた箇所があって、そこがエラーの原因ではあるみたいです。
(* 20行目あたりだと思います)

-- データベース: `AAA12345-sampleold`
--
CREATE DATABASE IF NOT EXISTS `AAA12345-sampleold` DEFAULT 
CHARACTER SET utf8 COLLATE utf8_general_ci;
USE `AAA12345-sampleold`;

上の「CREATE DATABASE」から「-sampleold`;」までの部分をコメントアウトしたり消したりしたら、うまくインポートできると書いている先人達が多かったです。でも私の場合、その方法では全くエラーが消えませんでした。データベースを作り直したりしてインポートし直してもエラーが何度も出て、ちょっと心折れました。

ちなみにコメントアウトの方法は確かこう↓
*/と*/で挟むみたいです。(間違ってたらいけないので、ちゃんと調べてくださいね、スペースがいるとかいらないとかは、私わかっていないので)

-- データベース: `AAA12345-sampleold`
--
/*CREATE DATABASE IF NOT EXISTS `AAA12345-sampleold` DEFAULT 
CHARACTER SET utf8 COLLATE utf8_general_ci */;
/*USE `AAA12345-sampleold` */;

どうにもエラーが直らなかったので、私、これを英文と思って読んでみました。何が書いてあるのかな?と思って。
適当に訳したのがこちら↓
もし`AAA12345-sampleold`が存在しなかったら、データベースを作る、デフォルトの文字はutf8、照合するutf8_general_ci、`AAA12345-sampleold`を使う。

ということは、新しいデータベースの名前`AAA12345-samplenew`を先に入力して書いておけば、「存在しなかったら作る」が作る必要も無くなるので、エラーが無くなるんじゃないかと思ったんです。ちょっと説明が下手でわかりにくいとは思うんだけど・・・。

つまり、新しいデータベースを作ってインポートしたので、新しいデータベース名はできています。エクスポートしたファイルには古いデータベースのことを書いているので、そこに新しい情報を入れたらいいんじゃないかって思ったんです。・・・多分言葉を変えたって私の説明ではちっともわからないと思うので、下の書き換えたコードを見てください。自分で言っててもわからなくなってきたし・・・(笑)
上が新しくて、下が古いコード(エラーが出た方)です。
(比較しやすいかと思って並べてみました)最初のデータベース:のあとは特に変更しませんでした。

/*新しく書き換えたコード*/

-- データベース: `AAA12345-sampleold`
--
CREATE DATABASE IF NOT EXISTS `AAA12345-samplenew` DEFAULT 
CHARACTER SET utf8 COLLATE utf8_general_ci;
USE `AAA12345-samplenew`;
/*エキスポートした時のままのコード*/

-- データベース: `AAA12345-sampleold`
--
CREATE DATABASE IF NOT EXISTS `AAA12345-sampleold` DEFAULT 
CHARACTER SET utf8 COLLATE utf8_general_ci;
USE `AAA12345-sampleold`;

.sqlファイルの修正箇所はここだけです。
新しく作ったデータベースにはインポート時にエラーが出た時に中途半端にデータが入ってしまったので、一旦全部削除しました。その後に上のように書き直した.sqlファイルを再度インポートしたら無事にエラーが消えました。
それにしても、よく不具合が起こらなかったな〜と思っています。
何が良かったんだか・・・。

今契約しているレンタルサーバーのプランはデータベースを無限に作れるので、失敗したらまたデータベースを作り直せばいいやという考えで適当にやってみました。それでこんな無茶なこともできたんだと思っています。

2年前にデータベースを更新するときは、データベースが1つしか作れないプランで更新にものすごく苦労しました。今回データベースをたくさん作れるプランに変えておいたことだけは、良かったかもしれません。

正直しばらくデータベースの更新はしたくないです。また2年後ぐらいに更新を促されるのかな〜めんどくさい!!やっぱりちょっとは勉強しておこうかなと思っています。難しいのかな〜。

この記事が気に入ったらサポートをしてみませんか?