WordMoveでDBのみ同期できない時の対処法メモ。

前回の記事「【Conoha】WordMoveでローカル環境と本番環境を同期してみたぞいっ【VVV】」の補足というか続き。

 

現在の状態

WordMoveでローカルのVVVからVPSのKUSANAGI環境にプッシュすることはできているが、DBのところだけなんかエラーが出ているという状態。

実際に出ているエラー内容

Error code 1 returned by command “mysqldump –user=ユーザ名 –password=パスワード–result-file=”/home/kusanagi/プロファイル名/DocumentRoot/wp-content/dump.sql” データベース名”: mysqldump: Can’t create/write to file ‘/home/kusanagi/プロファイル名/DocumentRoot/wp-content/dump.sql’ (Errcode: 13 “Permission denied”) (Wordmove::ShellCommandError)

というエラー。

エラーを見る限りパーミッションが足りていないんだなということがわかります。

 

mysqlをみてみた

KUSANAGIのほうにログインして、エラーのところがどうなっているのかをみてみました。

mysqldump --host=IPアドレス --user=ユーザ名 --password=パスワード --all-databases

そしたらなんかエラーが。

mysqldump: Got error: 1130: “Host ‘ほげほげ’ is not allowed to connect to this MariaDB server” when trying to connect

調べて見るとユーザとホストの設定をしないといけないみたいでした。

他のサーバに入れない。MySQLで他のサーバからのアクセスを許可する – ヌキのやる気のないエンジニアブログ

 

まずはmysqlにログインしようと試みました。

mysql -u root

そしたらまたエラーが。

ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: NO)

 

MySQLインストール時に遭遇する「アクセス拒否エラー(Access denied for user ‘root’@’localhost’)」の対処 | Mobile First Marketing Labo

[CentOS7]mysqlの初期rootパスが分からんのでリセットしたお話 – ADACHIN SERVER LABO

を参考に以下の手順で設定。

まずはMySQLの停止をしておきます。

service mysqld stop

/etc/my.cnf を編集

vi /etc/my.cnf
[mysqld]
skip-grant-tables

を追記。
そしてmysqlを再起動

systemctl restart mysqld

これでログインできるようになっているはずなので

mysql -u root

でログイン。

mysql -u root

MySQLインストール時に遭遇する「アクセス拒否エラー(Access denied for user ‘root’@’localhost’)」の対処の4を実行させます。

できたらmysqlを再起動します。

そして/etc/my.cnfの先ほど書いた部分を削除します。

vi /etc/my.cnf
[mysqld]
skip-grant-tables #けす

そしてもう一度mysqlを再起動します。

ほいでとりあえずmysqlにはログインできるようになったはずです。

で、これをしたらwordmoveで成功すると何故か思っていたんですが、問題はパーミッションの方です。

 

パーミッションをチェックしよう

まずは現在のパーミッションをチェックします。

チェックするのは最初のエラーの

/home/kusanagi/プロファイル名/DocumentRoot/wp-content/dump.sql

この部分。

現状dump.sqlなんてものはできてないはずなので(一時ファイルのはずなのでwordmoveで実行時のみ生成される)、wp-contentの方の権限をチェックします。

cd /home/kusanagi/プロファイル名/DocumentRoot/
ll

おそらく初期値はこんな感じだった気がします。(確認せずに変えたのでわからない・・・)

そもそもllコマンドも初めて使ったレベルでパーミッションのことがサッパリだったので、変えなかきゃいけないのはわかるけど、どう変えていいかもサッパリなわけです。

ので調べてみました。以下の記事がわかりやすかったです。

【一通り理解】Linuxパーミッションの基本とその設定方法

 

大事な部分は

①d ②rwx ③rwx ④r-- ⑤kusanagi ⑥kusanagi

で、それぞれ

  1. ファイルタイプ
  2. ⑤の所有者の権限
  3. ⑥のグループの権限
  4. 所有者でもグループでもない人の権限
  5. 所有者
  6. グループ

だそうです。

rwxはそれぞれ読み出し/書き出し/実行の権限を表示しています。

 

そもそも所有者とグループの違いとは・・・?となったので調べてみた。

【初心者向け】Linuxのグループとは? ざっくりの説明

 

ほうほう。でも今回のグループkusanagiって、誰が属してるの?どう調べるの?時になったので調べてみた。

Linuxコマンドでユーザーのグループ確認・変更。

ほうほう。

groups kusanagi

今回はこれで調べられるわけですな。

 

パーミッションを変更しよう

さてさて、ちょっと寄り道してしまいましたが、今回必要な権限はrwxです。読み出し書き出し実行ができないと最初のエラーが出てしまいます。

んで今回movefile.ymlのssh接続時のユーザが、rootでもkusanagiでもない人になっています。

この人に権限を与えてあげないといけないわけですね。

 

アプローチ的には

  • kusanagiのグループにそのユーザを追加してあげる
  • 所有者又はグループをそのユーザにする
  • その他の部分をrwxにしちゃう

一番最後のはあかんでしょってのは明らかでしょう。

 

自分はグループ自体をそのユーザグループにしちゃいました。

chown kusanagi:接続したいユーザ wp-content

これでrwxになったのでwordmove自体はうまく行くはずです。
ただkusanagiのグループ内の別のやつから接続できなくなるわけなので、もしかするとアカンのかもしれないです。こういうときは所有者の方変えたほうがいいのかな・・・。

 

kusanagiグループにユーザを追加する場合は先ほどの記事でできるはずですが、少し試して見たら上手くいかなかったです。

同様なエラーが出ますが、原因はwp-contentの権限ではなく、rsyncの方の権限だと思います。

前回の記事の%wheelが許可されているためです。kusanagiグループを追記すればいけるはずではあると思います。

 

とりあえずこれでやっとDBの同期もできました。ヤッター。

なんとなーくパーミッションのことも勉強できたので良かったことにしました。でも知ってなきゃいけない知らないことがまだまだいっぱいですね。まだまだヒヨッコ🐥

 

ちょっと、前回の記事も含めてシンタックスハイライトが上手く動かなくなってます。バグです。早めに直します。すみません。

それではでは〜。

 

WordPress

Comments...

コメントは認証制です。詳しくは下記の注意をお読みください。お気軽にコメントお願いします!

Write a Comment

コメント時の注意

「Twitter」「Facebook」「Google+」「WordPress」のいずれかのアカウントをお持ちの方は各アカウントと連携することでコメントできます。 コメントしたことはSNSに流れませんので、アカウントをお持ちの方はこちらの方法でコメントを投稿して下さると嬉しいです。 アカウントをお持ちでない方はメールアドレスで投稿することができます。 初回コメント時は承認後に表示されます。

Related Memo...

【WordPress】プラグイン化したカスタム投稿をテーマ内で使うとき

通常テーマ内でカスタム投稿を表示させる時に

$args = array( "posts_per_page" => 5,
        "post_type" => 'news'
    );
$the_query = new WP_Query( $args );
if($posts):

と書けば表示されるのに、プラグイン化していたので表示されなかった話。

 

functions.phpでカスタム投稿を追加している場合は必要ないが、newsというカスタム投稿をプラグイン化していたので、以下の記述が必要でした。

    public function __construct() {
        add_action( 'pre_get_posts', array($this, 'add_my_post_types_to_query') );
    }

    // queryにnewsをセットする
    function add_my_post_types_to_query( $query ) {
        if ( is_home() && $query->is_main_query() )
            $query->set( 'post_type', array( 'post', 'page', 'news' ) );
        return $query;
    }

WordPressプラグインの作り方は、また後日ちゃんとした記事にしたいと思ってます。今回はとりあえず忘れそうなのでメモだけで失礼。

WordPress

WordPressで現在のカテゴリから親カテゴリ/祖先カテゴリのスラッグを取得

//現在のカテゴリを取得
$categories = get_the_category($post->ID);
$category_slugs = array();
foreach($categories as $category){
    $cat = $category;
    array_push($category_slugs,$cat->slug);
    //親のカテゴリがなくなるまで回す
    while ($cat->parent) {
        $cat_parent_id = $cat->parent;
        $cat = get_category($cat_parent_id);
        array_push($category_slugs,$cat->slug);
    }
}

わりと頑張ってPHP書いてる。

WordPress

【WordPress】メディアライブラリ の画像IDを取得する

WordPressのメディアライブラリ にアップロードされた画像IDを取得する方法です。

例えば6件取得してギャラリーで表示するとき。

$ids = get_posts( 
    array(
        'post_type'      => 'attachment', 
        'post_mime_type' => 'image', 
        'post_status'    => 'inherit', 
        'posts_per_page' => 6,
        'fields'         => 'ids',
    ) 
);

$ids_str = '';
foreach ( $ids as $id ) {
    $ids_str .= $id . ',';
}

$ids_str = rtrim($ids_str, ',');

// ショートコードでギャラリーを表示
echo do_shortcode( '[gallery ids="' . $ids .'"]' );

意外と便利なのでは!

 

WordPress
more