タグ: MySQL

  • Excel で EXCEPT/NOT EXIST を実現するには?

    2つのカラムA, Bがあり、Bにはない値だけをAから抽出したい場合、RDBなら EXCEPT で直感的に、あるいは NOT EXISTS などでできるが、Excelでやるとなると?

    (さらに…)
  • ibdata1肥大化解消

    学認連携Moodleのibdata1は11GBになっている。よく言われることだが、InnoDBはOSがどのていどのファイルを扱えるか認識できない。肥大化が困るのは、ファイルシステムを食い潰すことであり、最適化したとしても縮小することはない。一度ダンプからリストアするしかない。また、ファイルごとに.idbを作成する「innodb_file_per_table」が効果があるとされており、my.cnfに

    [code]
    innodb_data_file_path = ibdata1:1G
    innodb_file_per_table
    [/code]

    を記述するという2009年の記事が見られるが、MySQLマニュアルを見ると、MySQL 5.6からこれがデフォルトになるそうだ。つまり、自動的にテーブルごとの.ibdを作成してくれるということである。先日のシステムメンテナンスで学認連携MoodleはMySQL 5.7にバージョンアップした。学認連携Moodleのデータディレクトリを見てみると、

    [code]
    -rw-r—– 1 mysql mysql 8720 3月 8 04:19 mdl_workshop_aggregations.frm
    -rw-r—– 1 mysql mysql 147456 3月 8 04:20 mdl_workshop_aggregations.ibd
    -rw-r—– 1 mysql mysql 9260 3月 8 04:19 mdl_workshop_assessments.frm
    -rw-r—– 1 mysql mysql 147456 3月 8 04:20 mdl_workshop_assessments.ibd
    -rw-r—– 1 mysql mysql 9222 3月 8 04:19 mdl_workshop_assessments_old.frm
    -rw-r—– 1 mysql mysql 163840 3月 8 04:20 mdl_workshop_assessments_old.ibd
    [/code]

    のように、ダンプをリストアする作業を行っていないのもかかわらず、夜中のmysqlcheck時に自動的にこのようになっているようだ。つまりmy.cnfは一切変更する必要はない。

    「innodb_data_file_path = ibdata1:1G」について、このサイズを越えたらどうなるのか見当がつかないので、明示的な固定サイズは止めることにした。しかしながら今のままの肥大を続けるのは良くないので、データベースのダンプをリストアする作業は必要である。この結果、ibdata1は11Gから79Mとなり、消費メモリが劇的に減少した。

    security-learning のメモリ使用状況。メンテナンス後は空きメモリが劇的に増加している。
    security-learning のメモリ使用状況。メンテナンス後は空きメモリが劇的に増加している。

    作業手順は次の通り。この記事の流れが非常に参考になった。
    (さらに…)

  • RHEL Server 5.9 で PHP 5.4.11 & MySQL 5.5.29 (remi リポジトリ) を使う

    必要があり研究室のWebサーバのPHPとMySQLを更新することに。
    基本は remi リポジトリを一時的に有効にして yum –enablerepo=remi,epel –disableexclude=php install php* mysql* で良いはずだがここと同じエラーでハマった。i386 のパッケージを削除して解決。

    ところが、このWebが表示されないという問題が発生した。試しに、コマンドでパースできるか試すとエラー。該当のプラグインを削除して解決した。
    [code][uep@hosts02b uep]$ php index.php
    PHP Fatal error: Call-time pass-by-reference has been removed in /var/www/uep/wp-content/plugins/photo-dropper/application/core/Utility.php on line 69
    [/code]