mysqldump: Got errno 32 on write

表題のエラーが出た。

■ 環境

  • MySQL 5.6.34
  • Linux

■ mysqldump

データをバックアップしようとして下記のようなコマンドで実行しようとした。

$ mysqldump -uXXXXX -pXXXXX -hXXXXXXXX database | gzip > backup/$(date '+%Y%m%d').dump.gz

このように実行しようとしたところ、表題のエラーメッセージが出力された。あれ?と思ったが単に出力先のディレクトリを作成していないだけであった…。”backup“ディレクトリに出力しようとしていたのを忘れていたようだ。

ディレクトリに出力するのであれば、事前にちゃんと作成しておこう。またそのディレクトリに書き込み権限があるかも確認しておこう。

以上。

RPMを展開(rpm2cpio)

表題の通り。`rpm2cpio`コマンドでRPMをインストールせずに展開する。

■ 環境

  • CentOS 6.9

■ rpm2cpio

先日のSRPMパッケージを用いて行う。

$ ls -l httpd-2.2.15-60.el6.centos.5.src.rpm

`rpm2cpio`コマンドについて確認。

$ which rpm2cpio
/usr/bin/rpm2cpio
$
$ rpm -qf /usr/bin/rpm2cpio
rpm-4.8.0-55.el6.x86_64
$

通常インストールされているパッケージだけで十分なようである。

実際には下記のように展開する。

$ mkdir tmp
$ cd tmp
$ rpm2cpio ../httpd-2.2.15-60.el6.centos.5.src.rpm | cpio -id
14230 blocks
$

上記で展開された。

以上。

SRPMを取得

表題の通り。SRPMを取得したい。

■ 環境

  • CentOS 6.9

■ yumdownloader

`yumdownloader`コマンドで取得することができる。まずはパッケージが入っているか確認から。

$ sudo yum list yum-utils
  :
Installed Packages
yum-utils.noarch     1.1.30-40.el6    @anaconda-CentOS-201703281317.x86_64/6.9
$

この環境では”yum-utils“パッケージがインストールされていたので`yumdownloader`コマンドもインストール済みである。

$ which yumdownloader
/usr/bin/yumdownloader
$

では、SRPMを取得する。

$ yumdownloader --source nginx

上記でダウンロードできたのだが、これはepelレポジトリからのダウンロードからであった。下記ファイルを見てみると”epel-source“のレポジトリが有効であった。

$ cat /etc/yum.repos.d/epel.repo
  :
[epel-source]
name=Extra Packages for Enterprise Linux 6 - $basearch - Source
#baseurl=http://download.fedoraproject.org/pub/epel/6/SRPMS
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-6&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
gpgcheck=1
$

CentOS-Base.repo“ではソースを取得するレポジトリは有効になっていない、そもそも記載されていないので追記する必要がある。

$ cat /etc/yum.repos.d/CentOS-Base.repo
  :
[base-source]
name=CentOS-$full_releasever - Base source
baseurl=http://vault.centos.org/6.9/os/Source/
gpgcheck=1
gpgkey=http://vault.centos.org//RPM-GPG-KEY-CentOS-6
priority=1
enabled=1

[updates-source]
name=CentOS-$full_releasever - Updates Source
baseurl=http://vault.centos.org/6.9/updates/Source/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6
priority=1
enabled=1
$

これでhttpdのSRPMも取得することはできた。

以上。

インストールされるモジュール一覧

表題の通り。インストール前にRPMだけ存在するのだが、これで何がインストールされるのかを事前に知りたい。

■ 環境

  • CentOS 6.9

■ rpm

既にインストール済みのRPMパッケージに関しては、下記コマンドでインストールされたモジュールの一覧が取得できる。

$ rpm -ql [パッケージ]

未インストールではあるが手元にRPMパッケージのみがある場合、上記コマンドでは実行できないので更なるオプションが必要である。

$ rpm -qlp [パッケージ]

すっかり”-p“を忘れていたのでメモ。

以上。

■ 関連

パッケージでインストールされるモジュール

DB直接操作でプラグイン無効化

WordPressにおいて表題の通り。

■ 環境

  • WordPress 4.8.1

■ きっかけ

先日WordPressのとあるプラグインをアップデートしたタイミングでアクセスが不安定になった。「DB接続エラー」的なものが表示されていたのでDBが落ちたのかと思ったのだが、DB自体は正常に稼働しているようであった。500が返っていたのでWebサーバも確認したが特に問題はなさそう。となるとプラグインをアップデートしたのが原因としか考えられなかった。

しかし管理画面にもアクセスできない状態ではプラグインを停止することもできない。ファイルを消してしまえば良いのかもしれないが、それだとDBとの整合性が合わなくて別のエラーになりかねない。というわけでDBの値を直接操作することにした。

■ MySQL

MySQLで接続し、”wp_options“テーブルの下記行を確認した。

mysql> select * from wp_options where option_name = 'active_plugins' \G
*************************** 1. row ***************************
   option_id: 33
 option_name: active_plugins
option_value: a:13:{i:0;s:27:"xx1/xx1.php";i:1;s:34:"xx2/xx2.php";i:2;s:43:"xx3/xx3.php";i:3;s:55:"...
    autoload: yes
1 row in set (0.00 sec)

mysql&gt

上記のように”serialize“されたデータが入っていた。この”option_value“を空にしたところ正常にアクセスできるようになった。

もちろんプラグインは全て無効になっているので、アップデートして問題のあったもの以外のプラグインを再度有効化しておいた。

以上。