ホーム > MySQL

MySQLのアーカイブ

Plesk MySQLへ管理者権限で接続

  • 2010/8/28 土曜日 22:49:08
  • MySQL | VPS

使えるネットのVPSで使用されているMySQLに管理者権限でアクセスしたい思ったが、パスワードがわからず困っていた。探してみるとこのパスワードでアクセスできた。

cat /etc/psa/.psa.shadow

sshで接続してこれを実行すると確認できる。
下記のようにしてMySQLに管理者権限でアクセスできた。

mysql -uadmin -p`cat /etc/psa/.psa.shadow`

osCommerceを軽快に2 テーブル分割

注文管理関連のテーブルは、何年もサイトを運営していると何十万件というデータが保存されることになる。1つのテーブルに大量のデータが保管されると、新規データの登録時に時間がかかる。そこで、テーブルを分割するというアイデアが浮かんでくるが、テーブルの分割をプログラム側で対応すると、手間がかかりすぎるし、切り替え時にサーバを止めるタイミングも難しい。

実は、MySQLにはこのような状況に対応するためのMERGEテーブルというものがある。データが多くなったらMERGEテーブルとUNIONで既存のテーブルと新規のテーブルを1つのテーブルとして扱うようにすればいい。検索を実行するときは新旧テーブル全体を対象にして、データを登録するときは新しいテーブルを対象にできるなど、非常に都合がいい。テーブルの作り方を工夫すると連番も前のテーブルを自動的に引き継ぐのでさらに安心だ。

お客様のサーバで複数のテーブルを分割したが、osCommerceを稼働させたまま瞬時に作業を終わることができた。
ただし、準備に時間はかかった。

http://dev.mysql.com/doc/refman/4.1/ja/merge.html

osCommerceを軽快に1 複合インデックス

osCommerceやZen Cartのバージョンによっては注文関連のテーブルにインデックスを設定するとパフォーマンスが改善される。
ただし、丁寧にすべてのカラムごとに1つのインデックスを設定すると、インデックスが効果的に機能しない。
「実践ハイパフォーマンスMySQL」の66ページに、「MySQLでは、1つのクエリを実行するとき、1つのテーブルにつき1つのインデックスしか使用できないのである」と書かれている。とすると、WHERE句で指定される検索条件に使用されるカラムが何個もある場合は、せっかく設定したインデックスが無駄になるということになる。
こんなときは、複合インデックスにすると効果的。MySQLでは、1つのインデックスに対して15カラムまで1つのインデックスに設定できる。
注文関連テーブルの場合も、クエリを確認して、検索条件中のカラムを同一のインデックスに設定するといい。
phpMyAdminなどを使って、EXPLAINで分析しながら調整するとわかりやすい。
あるとき、トップページだけ時間がかかるので調べてみたら、ベストセラー(ランキング)を表示しているモジュールの中のクエリに時間がかかっていた。「WHERE」以降にはカラムがひとつあり、「ORDER BY」以降にもカラムがひとつあって、同じテーブルに属していたのでこの二つのカラムで複合インデックスを作ったら、2秒近くかかっていた処理が0.024秒に短縮された。

詳細は以下のURLで確認してください。

http://dev.mysql.com/doc/refman/4.1/ja/mysql-indexes.html

http://dev.mysql.com/doc/refman/4.1/ja/multiple-column-indexes.html

保護中: 重い osCommerce と MySQL を 高速化

この投稿はパスワードで保護されています。表示するにはパスワードを入力してください:


ZencartとWordPressの連携

Zencartの商品データをWordPressで利用するため、一旦ファイルに落として、文字コードを変換して使用することにした。
実は、MySQLには「create table 新しいテーブル名 like 元のテーブル名;」という構文があり、それを使ってコピーすることもできるらしいけど、MySQL上で文字コードを変換する方法を知らないのでこのままで行くことにした。

あとは、データをデータベースに読み込んで、ALTER TABLE 構文を使ってWordPressの投稿用テーブルになるよう修正する。負荷があまり大きくなければ定時更新処理を設定して連携のできあがりのはずだ。

/*!40101 SET NAMES ujis */;

  • 2007/12/18 火曜日 10:37:28
  • MySQL

CRONで定時に処理をすることで商品情報をコピーして、そのデータを使いWordPress側でコンテンツを作成することにした。しかし、文字化けが起こる。phpMyAdminでみるとすべて????のようになる。
nkfで文字コードもUTF8に変換しているし、mysqlには–default-character-set=utf8も設定している。DBもUTF8だし、テーブルもすべてUTF8。ほかに何があるかと調べること数時間。
mysqldumpで出力したときに、

/*!40101 SET NAMES ujis */;

こういうSQLも出力されている。一見コメント風なので、見逃していたが、これが有効なら、これ以降はEUCになってしまい、????のような文字化けになる。試しにsedを使い、

sed ‘s/SET NAMES ujis/SET NAMES utf8/g’ data.sql.euc > data.sql.utf8

のように修正して再実行。結果は文字化けなしでDBにデータを流し込めた。

ホーム > MySQL

検索
フィード
メタ情報

ページの上部に戻る