<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>RockyLinux9.7 | じじぃの引出し</title>
	<atom:link href="https://www.kazuban.com/blog/tag/rockylinux9-7/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.kazuban.com/blog</link>
	<description>なにかしら、皆さんの参考になれば幸いです！</description>
	<lastBuildDate>Fri, 11 Sep 2026 05:12:45 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.3</generator>

<image>
	<url>https://www.kazuban.com/blog/wp-content/uploads/2020/05/cropped-ICON-1-32x32.png</url>
	<title>RockyLinux9.7 | じじぃの引出し</title>
	<link>https://www.kazuban.com/blog</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>WordPress：PHP8.４、Mariadb10.11に更新</title>
		<link>https://www.kazuban.com/blog/php-mariadb-update/</link>
		
		<dc:creator><![CDATA[kazuban]]></dc:creator>
		<pubDate>Tue, 04 Aug 2026 01:01:45 +0000</pubDate>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Linux (CentOS、Rocky、Ubuntu)]]></category>
		<category><![CDATA[mariaDB更新]]></category>
		<category><![CDATA[PHP更新]]></category>
		<category><![CDATA[RockyLinux9.7]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://www.kazuban.com/blog/?p=12976</guid>

					<description><![CDATA[こちらの記事では、バックアップ用サーバー用途なので、試しもかねて新しいバージョンで設定しましたが 本サーバーのほうは、WordPress本体しか更新していませんでした。WordPress のサイトヘルスで更新の改善のメッ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">こちらの記事では、バックアップ用サーバー用途なので、試しもかねて新しいバージョンで設定しましたが</p>


<a href="https://www.kazuban.com/blog/wordpress-install-no3/" title="RockyLinux9.7で「WordPress環境構築「Vol-03」PHP8.4、MariaDB11.4" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" width="160" height="90" src="https://www.kazuban.com/blog/wp-content/uploads/2026/04/wordPress-environment-setup-no3-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://www.kazuban.com/blog/wp-content/uploads/2026/04/wordPress-environment-setup-no3-160x90.png 160w, https://www.kazuban.com/blog/wp-content/uploads/2026/04/wordPress-environment-setup-no3-120x68.png 120w, https://www.kazuban.com/blog/wp-content/uploads/2026/04/wordPress-environment-setup-no3-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">RockyLinux9.7で「WordPress環境構築「Vol-03」PHP8.4、MariaDB11.4</div><div class="blogcard-snippet internal-blogcard-snippet">RockyLinux9.7のインストール記事です。なるべくコピペで設定きるようにまとめていますPHP、MariaDB、第三弾。つづく・・・</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.kazuban.com/blog" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">www.kazuban.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.05.01</div></div></div></div></a>


<p class="wp-block-paragraph">本サーバーのほうは、WordPress本体しか更新していませんでした。<br>WordPress のサイトヘルスで更新の改善のメッセージがでていました。<br>サイトヘルスは「ダッシュボード　➡　ツール　➡　サイトヘルス」で確認できます<br>私の環境では、ステータスとしては「良好」ではありますがおすすめの改善が４件ありました<br>その中でも、「PHPのバージョン」「データベースのバージョン」は改善したほうがよさそうです</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>2026/09/11</strong><br>下記設定で正常に、PHP8.４、Mariadb10.11 に更新できましたが<br><span class="marker-under-red">後日サーバー機の更新「sudo dnf update」で一部のパッケージが更新できない！<br>というエラーがでました。</span><br><a href="#toc34">AIに相談し、下記記事で改善できました</a></p>
</blockquote>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">WordPress 必須条件（2026.08時点）</a></li><li><a href="#toc2" tabindex="0">PHPバージョンの更新</a><ol><li><a href="#toc3" tabindex="0">現バージョンの確認</a></li><li><a href="#toc4" tabindex="0">（事前に）バックアップを取る</a></li><li><a href="#toc5" tabindex="0">Remiリポジトリ追加</a></li><li><a href="#toc6" tabindex="0">モジュールリスト確認</a></li><li><a href="#toc7" tabindex="0">PHPモジュールのリセット</a></li><li><a href="#toc8" tabindex="0">新しいPHPバージョンの有効化（例: 8.4）</a></li><li><a href="#toc9" tabindex="0">新規インストールの場合</a></li><li><a href="#toc10" tabindex="0">新規インストールで拡張機能追加（よく使うパッケージ一式）</a></li><li><a href="#toc11" tabindex="0">アップグレードの場合</a></li><li><a href="#toc12" tabindex="0">更新の確認</a></li><li><a href="#toc13" tabindex="0">再起動</a></li><li><a href="#toc14" tabindex="0">更新の確認</a></li></ol></li><li><a href="#toc15" tabindex="0">MariaDBバージョンの更新</a><ol><li><a href="#toc16" tabindex="0">現バージョンの確認</a></li><li><a href="#toc17" tabindex="0">（事前に）バックアップを取る</a></li><li><a href="#toc18" tabindex="0">モジュールリスト確認</a></li><li><a href="#toc19" tabindex="0">MariaDB停止</a></li><li><a href="#toc20" tabindex="0">キャッシュのクリアとmariadbモジュールのリセット</a></li><li><a href="#toc21" tabindex="0">新しいモジュール（10.11）へ切り替え</a></li><li><a href="#toc22" tabindex="0">設定ファイル「/etc/my.cnf.d/mariadb-server.cnf」&nbsp;更新</a></li><li><a href="#toc23" tabindex="0">MariaDB 起動</a></li><li><a href="#toc24" tabindex="0">DB 内部の更新</a></li><li><a href="#toc25" tabindex="0">Apache＆PHP-FPM　再起動</a></li><li><a href="#toc26" tabindex="0">更新の確認</a></li></ol></li><li><a href="#toc27" tabindex="0">トラブル時、mariaDB 事前バックアップからリストアする方法</a><ol><li><a href="#toc28" tabindex="0">基本のリストアコマンド</a></li><li><a href="#toc29" tabindex="0">リストア時の注意点</a><ol><li><a href="#toc30" tabindex="0">MariaDBが起動している必要があります</a></li><li><a href="#toc31" tabindex="0">アップグレード失敗などで「元の10.5環境に戻す」場合</a></li><li><a href="#toc32" tabindex="0">既存データとの重複に注意</a></li><li><a href="#toc33" tabindex="0">リストア後の確認</a></li></ol></li></ol></li><li><a href="#toc34" tabindex="0">後日の、dnf update でエラーがでました</a><ol><li><a href="#toc35" tabindex="0">原因</a></li><li><a href="#toc36" tabindex="0">対処手順</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">WordPress 必須条件（2026.08時点）</span></h2>



<p class="wp-block-paragraph">2026.08時点では、「PHP 8.3以上」「MariaDB 10.11以上」が必須条件になっています</p>


<a rel="noopener" href="https://ja.wordpress.org/about/requirements/" title="必須要件" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img fetchpriority="high" decoding="async" src="https://www.kazuban.com/blog/wp-content/uploads/cocoon-resources/blog-card-cache/6ad4f5b66be737a1618019916626b1bd.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">必須要件</div><div class="blogcard-snippet external-blogcard-snippet">Requirements To run WordPress, it’s recommended your host supports: That’s really it. Apache or Nginx is recom</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://ja.wordpress.org/about/requirements/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">ja.wordpress.org</div></div></div></div></a>


<p class="wp-block-paragraph">私の環境では、「サイトヘルス」➡「情報」で確認すると「PHP 8.2」「MariaDB 10.5」です</p>



<h2 class="wp-block-heading"><span id="toc2">PHPバージョンの更新</span></h2>



<h3 class="wp-block-heading"><span id="toc3">現バージョンの確認</span></h3>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-1"><code>php --version</code></pre>



<h3 class="wp-block-heading"><span id="toc4">（事前に）バックアップを取る</span></h3>



<p class="wp-block-paragraph">必須ではありませんが、wp-config.php, DB, ファイル一式のバックアップが推奨されます<br>wp-config.phpは「cp」コマンドで簡単にコピーできます<br>DB や WordPressのファイル一式は、こちらでも紹介しているスクリプトでも取る事ができます</p>


<a href="https://www.kazuban.com/blog/rokeylinux9-7-wordpress-backup/" title="WordPress の「バックアップ・リストア」BASHスクリプト。crontab で自動バックアップ" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://www.kazuban.com/blog/wp-content/uploads/2026/06/wordpress-backup-Gemini_Generated_Image-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://www.kazuban.com/blog/wp-content/uploads/2026/06/wordpress-backup-Gemini_Generated_Image-160x90.png 160w, https://www.kazuban.com/blog/wp-content/uploads/2026/06/wordpress-backup-Gemini_Generated_Image-120x68.png 120w, https://www.kazuban.com/blog/wp-content/uploads/2026/06/wordpress-backup-Gemini_Generated_Image-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">WordPress の「バックアップ・リストア」BASHスクリプト。crontab で自動バックアップ</div><div class="blogcard-snippet internal-blogcard-snippet">RockyLinux9.7でバックアップサーバーを新しくしたので、バックアップ＆復元スクリプトも書き直してみました。せっかくなので、最新のBASH構文をAIに聞きながらですが、本当すごいなAIは・・デバッグ方法も教えてもらいました。コードは、コピペで利用できるように投稿しています。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.kazuban.com/blog" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">www.kazuban.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.06.07</div></div></div></div></a>


<h3 class="wp-block-heading"><span id="toc5">Remiリポジトリ追加</span></h3>



<p class="wp-block-paragraph">AppStreamの、8.3を利用する場合やすでにRemiリポジトリが設定されている場合には不要ですが<br>より新しいPHPバージョンにアップデートした場合には、追加しておきます<br>今回筆者は、8.4に更新しようと思っているので、Remiリポジトリを追加します</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-2"><code>## Rocky Linux 9の場合
sudo dnf install -y epel-release
sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-9.rpm</code></pre>



<h3 class="wp-block-heading"><span id="toc6">モジュールリスト確認</span></h3>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-3"><code>dnf module list php</code></pre>



<p class="wp-block-paragraph">もし、404などのエラーが出てしまう場合には、一度キャッシュをクリアして再確認します</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-4"><code>sudo rm -f /etc/dnf/vars/releasever
sudo dnf clean all &amp;&amp; sudo dnf makecache
dnf module list php</code></pre>



<pre class="wp-block-preformatted">Rocky Linux 9 - AppStream<br>Name       Stream            Profiles                        Summary                                <br>php        8.1               common [d], devel, minimal      PHP scripting language                 <br>php        8.2               common [d], devel, minimal      PHP scripting language                 <br>php        8.3               common [d], devel, minimal      PHP scripting language                 <br><br>Remi's Modular repository for Enterprise Linux 9 - x86_64<br>Name       Stream            Profiles                        Summary                                <br>php        remi-7.4          common [d], devel, minimal      PHP scripting language                 <br>php        remi-8.0          common [d], devel, minimal      PHP scripting language                 <br>php        remi-8.1          common [d], devel, minimal      PHP scripting language                 <br>php        remi-8.2          common [d], devel, minimal      PHP scripting language                 <br>php        remi-8.3          common [d], devel, minimal      PHP scripting language                 <br>php        <strong>remi-8.4</strong>          common [d], devel, minimal      PHP scripting language                 <br>php        remi-8.5          common [d], devel, minimal      PHP scripting language </pre>



<h3 class="wp-block-heading"><span id="toc7">PHPモジュールのリセット</span></h3>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-5"><code>sudo dnf module reset php -y</code></pre>



<h3 class="wp-block-heading"><span id="toc8">新しいPHPバージョンの有効化（例: 8.4）</span></h3>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-6"><code>sudo dnf module enable php:remi-8.4 -y</code></pre>



<h3 class="wp-block-heading"><span id="toc9">新規インストールの場合</span></h3>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-7"><code>sudo dnf install php php-fpm -y</code></pre>



<h3 class="wp-block-heading"><span id="toc10">新規インストールで拡張機能追加（よく使うパッケージ一式）</span></h3>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-8"><code>sudo dnf install -y \
  php-mysqlnd \
  php-curl \
  php-exif \
  php-fileinfo \
  php-gd \
  php-imagick \
  php-intl \
  php-mbstring \
  php-xml \
  php-zip</code></pre>



<h3 class="wp-block-heading"><span id="toc11">アップグレードの場合</span></h3>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-9"><code>sudo dnf update php\* -y</code></pre>



<h3 class="wp-block-heading"><span id="toc12">更新の確認</span></h3>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-10"><code>php -v</code></pre>



<h3 class="wp-block-heading"><span id="toc13">再起動</span></h3>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-11"><code>sudo systemctl restart httpd
sudo systemctl restart php-fpm</code></pre>



<h3 class="wp-block-heading"><span id="toc14">更新の確認</span></h3>



<p class="wp-block-paragraph">これで更新されたと思います<br>対象のWordPressへログインし、「サイトヘルス」で確認してください。</p>



<h2 class="wp-block-heading"><span id="toc15">MariaDBバージョンの更新</span></h2>



<h3 class="wp-block-heading"><span id="toc16">現バージョンの確認</span></h3>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-12"><code>mariadb --version</code></pre>



<h3 class="wp-block-heading"><span id="toc17">（事前に）バックアップを取る</span></h3>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-13"><code>sudo mysqldump -u root -p --all-databases &gt; /path/to/backup_$(date +%Y%m%d).sql</code></pre>



<p class="wp-block-paragraph"><a href="#toc4">PHP更新の項目でも紹介した</a>こちらスクリプトでもバックアップは可能です</p>



<h3 class="wp-block-heading"><span id="toc18">モジュールリスト確認</span></h3>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-14"><code>dnf module list mariadb</code></pre>



<pre class="wp-block-code"><code>$ dnf module list mariadb
メタデータの期限切れの最終確認: 1:19:24 前の 2026年08月03日 10時24分16秒 に実施しました。
Rocky Linux 9 - AppStream
Name         Stream      Profiles                         Summary                       
mariadb      <strong>10.11</strong>       client, galera, server &#91;d]       MariaDB Module                            
mariadb      11.8<strong> </strong>       client, galera, server &#91;d]       MariaDB Module                            </code></pre>



<h3 class="wp-block-heading"><span id="toc19">MariaDB停止</span></h3>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-15"><code>sudo systemctl stop mariadb</code></pre>



<h3 class="wp-block-heading"><span id="toc20">キャッシュのクリアとmariadbモジュールのリセット</span></h3>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-16"><code>sudo dnf clean all
sudo dnf module reset mariadb -y</code></pre>



<h3 class="wp-block-heading"><span id="toc21">新しいモジュール（10.11）へ切り替え</span></h3>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-17"><code>sudo dnf module switch-to mariadb:10.11 -y
sudo dnf update mariadb-server mariadb -y ##念のためパッケージ更新も明示
mariadb --version ##10.11になっているか確認</code></pre>



<h3 class="wp-block-heading"><span id="toc22">設定ファイル「/etc/my.cnf.d/mariadb-server.cnf」&nbsp;更新</span></h3>



<p class="wp-block-paragraph">設定ファイルのセッション名にバージョン番号（mariadb-10.5など）が含まれている場合があります<br>その項目下になにもない場合は、特に編集の必要はありませんが、今後追加の予定などある場合には<br>バージョンに合わせたセッション名に書き換えておいたほうが無難です</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-18"><code>cd /etc/my.cnf.d/
sudo vi ./mariadb-server.cnf</code></pre>



<pre class="wp-block-preformatted">・<br>・<br># This group is only read by MariaDB-10.5 servers.<br># If you use the same .cnf file for MariaDB of different versions,<br># use this group for options that older servers don't understand<br>#[mariadb-10.5]<br># ↓ 変更　<br>[mariadb-10.11] <br>・<br>・<br></pre>



<h3 class="wp-block-heading"><span id="toc23">MariaDB 起動</span></h3>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-19"><code>sudo systemctl start mariadb
sudo systemctl enable mariadb</code></pre>



<h3 class="wp-block-heading"><span id="toc24">DB 内部の更新</span></h3>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-20"><code>sudo mariadb-upgrade -u root -p「DB管理者パスワード」</code></pre>



<h3 class="wp-block-heading"><span id="toc25">Apache＆PHP-FPM　再起動</span></h3>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-21"><code>sudo systemctl restart php-fpm
sudo systemctl restart httpd</code></pre>



<h3 class="wp-block-heading"><span id="toc26">更新の確認</span></h3>



<p class="wp-block-paragraph">対象のWordPressへログインし、「サイトヘルス」で確認します</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="793" height="141" src="https://www.kazuban.com/blog/wp-content/uploads/2026/08/mariadb10-11.png" alt="" class="wp-image-13024" srcset="https://www.kazuban.com/blog/wp-content/uploads/2026/08/mariadb10-11.png 793w, https://www.kazuban.com/blog/wp-content/uploads/2026/08/mariadb10-11-500x89.png 500w, https://www.kazuban.com/blog/wp-content/uploads/2026/08/mariadb10-11-300x53.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2026/08/mariadb10-11-768x137.png 768w" sizes="(max-width: 793px) 100vw, 793px" /></figure>



<p class="wp-block-paragraph">筆者の環境では、トラブルなく更新できました。</p>



<h2 class="wp-block-heading"><span id="toc27">トラブル時、mariaDB 事前バックアップからリストアする方法</span></h2>



<h3 class="wp-block-heading"><span id="toc28">基本のリストアコマンド</span></h3>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-22"><code>sudo mariadb -u root -p &lt; /path/to/backup_20260803.sql</code></pre>



<h3 class="wp-block-heading"><span id="toc29">リストア時の注意点</span></h3>



<h4 class="wp-block-heading"><span id="toc30">MariaDBが起動している必要があります</span></h4>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-23"><code>sudo systemctl status mariadb  ##起動確認
sudo systemctl start mariadb   ##停止していたら起動</code></pre>



<h4 class="wp-block-heading"><span id="toc31">アップグレード失敗などで「元の10.5環境に戻す」場合</span></h4>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-24"><code>sudo dnf module switch-to mariadb:10.5 -y
sudo dnf update mariadb-server mariadb -y ##念のためパッケージ更新も明示
mariadb --version ##10.5になっているか確認</code></pre>



<h4 class="wp-block-heading"><span id="toc32">既存データとの重複に注意</span></h4>



<p class="wp-block-paragraph"><code>--all-databases</code> のダンプには <code>CREATE DATABASE</code> 文が含まれているため、同名DBが既に存在する場合は上書きされます。もし「クリーンな状態に戻したい」なら、リストア前に対象DBを削除しておくと安全です。</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-25"><code>##例：wordpress用DBを削除してからリストアする場合
sudo mariadb -u root -p -e "DROP DATABASE wordpress;"
sudo mariadb -u root -p &lt; /path/to/backup_20260803.sql</code></pre>



<h4 class="wp-block-heading"><span id="toc33">リストア後の確認</span></h4>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-26"><code>sudo mariadb -u root -p -e "SHOW DATABASES;"</code></pre>



<h2 class="wp-block-heading"><span id="toc34">後日の、dnf update でエラーがでました</span></h2>



<p class="wp-block-paragraph">後日、サーバーの「dnf update」でエラーがでました<br>一部のパッケージが更新できない！というエラーです</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<ul class="wp-block-list">
<li>エラー:<br>問題 1: package gd3php-2.3.3-9.el9.remi.x86_64 from @System requires libavif.so.15()(64bit), but none of the providers can be installed</li>



<li>cannot install both libavif-1.1.1-2.el9.next.x86_64 from epel-next and libavif-0.11.1-5.el9.x86_64 from @System</li>



<li>cannot install both libavif-1.1.1-2.el9.next.x86_64 from epel-next and libavif-0.11.1-5.el9.x86_64 from epel</li>



<li>パッケージの最良アップデート候補をインストールできません libavif-0.11.1-5.el9.x86_64</li>



<li>パッケージの最良アップデート候補をインストールできません gd3php-2.3.3-9.el9.remi.x86_64</li>



<li>nothing provides libdav1d.so.6()(64bit) needed by libavif-0.11.1-0.x86_64 from remi-safe<br>問題 2: package php-gd-8.4.25-1.module_php.8.4.el9.remi.x86_64 from @System requires libgd.so.103()(64bit), but none of the providers can be installed</li>



<li>package gd3php-2.3.3-9.el9.remi.x86_64 from @System requires libavif.so.15()(64bit), but none of the providers can be installed</li>



<li>package gd3php-2.3.3-9.el9.remi.x86_64 from remi-safe requires libavif.so.15()(64bit), but none of the providers can be installed</li>



<li>package gd3php-2.3.3-8.el9.remi.x86_64 from remi-safe requires libavif.so.14()(64bit), but none of the providers can be installed</li>



<li>package libavif-0.11.1-5.el9.x86_64 from @System requires libSvtAv1Enc.so.0()(64bit), but none of the providers can be installed</li>



<li>package libavif-0.11.1-5.el9.x86_64 from epel requires libSvtAv1Enc.so.0()(64bit), but none of the providers can be installed</li>



<li>package libavif0.10-0.10.1-2.el9.x86_64 from epel requires libSvtAv1Enc.so.0()(64bit), but none of the providers can be installed</li>



<li>cannot install both svt-av1-libs-2.3.0-2.el9.next.x86_64 from epel-next and svt-av1-libs-0.9.0-1.el9.x86_64 from @System</li>



<li>cannot install both svt-av1-libs-2.3.0-2.el9.next.x86_64 from epel-next and svt-av1-libs-0.9.0-1.el9.x86_64 from epel</li>



<li>パッケージの最良アップデート候補をインストールできません svt-av1-libs-0.9.0-1.el9.x86_64</li>



<li>パッケージの最良アップデート候補をインストールできません php-gd-8.4.25-1.module_php.8.4.el9.remi.x86_64</li>



<li>nothing provides libdav1d.so.6()(64bit) needed by libavif-0.11.1-0.x86_64 from remi-safe<br>(競合するパッケージを置き換えるには、コマンドラインに &#8216;&#8211;allowerasing&#8217; を追加してみてください <br>または、&#8217;&#8211;skip-broken&#8217; を追加して、インストール不可のパッケージをスキップしてください <br>または、&#8217;&#8211;nobest&#8217; を追加して、最適候補のパッケージのみを使用し<br>ないでください)</li>
</ul>
</blockquote>



<p class="wp-block-paragraph">警告メッセージに、スキップする助言があったので、一つづつやってみます</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-27"><code>sudo dnf update --allowerasing</code></pre>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-28"><code>sudo dnf update --skip-broken</code></pre>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-29"><code>sudo dnf update --nobest</code></pre>



<p class="wp-block-paragraph">どのオプションがいいのかわかりませんが、私の環境では、最後のオプションで、先へ進み<br>更新できないパッケージ以外はupdate はできましたが、<br>これでいいのかな？ -> AIさん教えて！</p>



<blockquote class="wp-block-quote has-watery-red-background-color has-background is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">結論から言うと、<strong>そのままにしておくのは良くありません</strong>。システムが壊れているわけではありませんが、一部のパッケージ（<code>gd3php</code> や <code>php-gd</code>）の更新がスキップされており、今後セキュリティアップデートなどを受け取れなくなる危険性があります。</p>
</blockquote>



<h3 class="wp-block-heading"><span id="toc35">原因</span></h3>



<p class="wp-block-paragraph"><strong><code>epel-next</code> リポジトリが有効化されていること</strong>が原因です。</p>



<ul class="wp-block-list">
<li><strong>EPEL-Next</strong> は、CentOS Stream（次期RHEL）向けの先行テストリポジトリです。</li>



<li>Rocky Linux（安定版RHELクローン）でこれを有効にすると、<code>epel-next</code> から入ってきた新しすぎるパッケージ（<code>libavif-1.1.1</code> や <code>svt-av1-libs-2.3.0</code>）が、通常の <code>epel</code> や <code>remi</code> リポジトリのパッケージと競合を起こしてしまいます。</li>
</ul>



<h3 class="wp-block-heading"><span id="toc36">対処手順</span></h3>



<p class="wp-block-paragraph"><strong>1.epel-next の無効化と CRB の有効化:</strong>競合の原因を無効化。<br>競合の元になっている <code>epel-next</code> を無効にし、Remiに必要な <code>crb</code> リポジトリを有効化します。</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-30"><code>sudo dnf config-manager --set-disabled epel-next
sudo dnf config-manager --set-enabled crb</code></pre>



<p class="wp-block-paragraph"><em>確認方法:</em> <code>dnf repolist</code> を実行し、<code>crb</code> があり <code>epel-next</code> がないことを確認します。</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-31"><code>dnf repolist</code></pre>



<p class="wp-block-paragraph"><strong>2.PHP 8.4 モジュールの指定:</strong>PHP 8.4 へのリセット。<br>PHP 8.4 モジュールを明示的に有効化し直します。<br><em>確認方法:</em> <code>dnf module list php</code> を実行し、<code>remi-8.4</code> の項目に <code>[e]</code> が付いていることを確認します。</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-32"><code>dnf module list php</code></pre>



<p class="wp-block-paragraph"><strong>3.キャッシュクリアと同期（distro-sync）:</strong>バージョン調整。<br>キャッシュを破棄し、<code>epel-next</code> 由来の不整合パッケージを正規バージョンへダウングレード・同期させます。</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-33"><code>sudo dnf clean all
sudo dnf distro-sync -y</code></pre>



<p class="wp-block-paragraph"><strong>4.確認:</strong>仕上げ<br>通常の dnf update を実行:<br>最後にオプションなしでシステム全体を更新します。</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-34"><code>sudo dnf update</code></pre>



<p class="wp-block-paragraph">エラーやスキップの警告が出ずに「完了しました!」と表示されれば成功です。<br>作業完了後、<code>php -v</code> を実行して <strong>PHP 8.4.x</strong> と表示されることを確認してください。</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-35"><code>php -v</code></pre>



<p class="wp-block-paragraph">PHP 8.4 で <code>gd</code> モジュールが正常に読み込まれているか確認</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-36"><code>php -m | grep -i gd</code></pre>



<p class="wp-block-paragraph">実行してターミナルに <span class="bold-red"><strong><code>gd</code></strong> </span>と表示されれば、モジュールは正常に読み込まれています。<br>さらに、JPEGやPNG、WebP、AVIFなどの画像フォーマットが有効になっているか詳しく確認したい場合は、次のコマンドを実行してください。</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-37"><code>php -r "print_r(gd_info());"</code></pre>



<pre class="wp-block-preformatted">Array<br>(<br>    [GD Version] =&gt; 2.3.3<br>    [FreeType Support] =&gt; 1<br>    [FreeType Linkage] =&gt; with freetype<br>    [GIF Read Support] =&gt; 1<br>    [GIF Create Support] =&gt; 1<br>    [JPEG Support] =&gt; 1<br>    [PNG Support] =&gt; 1<br>    [WBMP Support] =&gt; 1<br>    [XPM Support] =&gt; 1<br>    [XBM Support] =&gt; 1<br>    [WebP Support] =&gt; 1<br>    [BMP Support] =&gt; 1<br>    [AVIF Support] =&gt; 1<br>    [TGA Read Support] =&gt; 1<br>    [JIS-mapped Japanese Font Support] =&gt;<br>)</pre>



<p class="wp-block-paragraph">AIさん、おかげで、正常になりました</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>WordPress の「バックアップ・リストア」BASHスクリプト。crontab で自動バックアップ</title>
		<link>https://www.kazuban.com/blog/rokeylinux9-7-wordpress-backup/</link>
		
		<dc:creator><![CDATA[kazuban]]></dc:creator>
		<pubDate>Sun, 07 Jun 2026 06:28:26 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[Linux (CentOS、Rocky、Ubuntu)]]></category>
		<category><![CDATA[BASH]]></category>
		<category><![CDATA[RockyLinux9.7]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[バックアップ]]></category>
		<category><![CDATA[リストア]]></category>
		<category><![CDATA[自宅サーバー]]></category>
		<guid isPermaLink="false">https://www.kazuban.com/blog/?p=12790</guid>

					<description><![CDATA[バックアップ・リストアの記事は、以前こちらでも紹介しました 目次 新しいBASHデバッグshellcheckset コマンドスクリプト構成WordPress_Config_Data.sh : 変数設定Wp-Backup. [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">バックアップ・リストアの記事は、以前こちらでも紹介しました </p>


<a href="https://www.kazuban.com/blog/rokeylinux9-3-wordpress-backup/" title="RockyLinux9.３で自宅サーバーを再構築V07・WordPress のバックアップとリストア" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://www.kazuban.com/blog/wp-content/uploads/2023/12/wordpress-backup-restore-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://www.kazuban.com/blog/wp-content/uploads/2023/12/wordpress-backup-restore-160x90.png 160w, https://www.kazuban.com/blog/wp-content/uploads/2023/12/wordpress-backup-restore-120x68.png 120w, https://www.kazuban.com/blog/wp-content/uploads/2023/12/wordpress-backup-restore-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">RockyLinux9.３で自宅サーバーを再構築V07・WordPress のバックアップとリストア</div><div class="blogcard-snippet internal-blogcard-snippet">引越しするには、旧環境のデータをバックアップし、新環境へリストアします。WordPress のバックアップとリストアの方法を説明し、自動バックアップするスクリプトを作成します。バックアップ・リストアができると、引越しだけでなく、トラブル時にも以前の状態まで戻せます。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.kazuban.com/blog" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">www.kazuban.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2024.01.08</div></div></div></div></a>



  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-4" checked><label class="toc-title" for="toc-checkbox-4">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">新しいBASH</a></li><li><a href="#toc2" tabindex="0">デバッグ</a><ol><li><a href="#toc3" tabindex="0">shellcheck</a></li><li><a href="#toc4" tabindex="0">set コマンド</a></li></ol></li><li><a href="#toc5" tabindex="0">スクリプト構成</a><ol><li><a href="#toc6" tabindex="0">WordPress_Config_Data.sh : 変数設定</a></li><li><a href="#toc7" tabindex="0">Wp-Backup.sh : データベース＆WordPressコンテンツのバックアップ</a></li><li><a href="#toc8" tabindex="0">MariaDB_Backup.sh : データベースバックアップ（Wp-Backup.shから呼ばれる）</a></li><li><a href="#toc9" tabindex="0">Wp-Content_Backup.sh : WordPressコンテンツバックアップ（Wp-Backup.shから呼ばれる）</a></li><li><a href="#toc10" tabindex="0">Wp-Restore.sh : データベース＆WordPressコンテンツの復元</a></li><li><a href="#toc11" tabindex="0">MariaDB_Restore.sh データベース復元（Wp-Restore.shから呼ばれる）</a></li><li><a href="#toc12" tabindex="0">Wp-Content_Restore.sh: WordPressコンテンツ復元（Wp-Restore.shから呼ばれる）</a></li><li><a href="#toc13" tabindex="0">Header.sh : デバッグモード仕様（変数 DEBUG=1 で有効）</a></li><li><a href="#toc14" tabindex="0">Tidyup_backfile.sh : バックアップファイルの整理（引数：対象ディレクトリ・保存日数）</a></li></ol></li><li><a href="#toc15" tabindex="0">リストアする場合の注意点</a><ol><li><a href="#toc16" tabindex="0">update_wp_url.sh</a></li></ol></li><li><a href="#toc17" tabindex="0">自動バックアップ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">新しいBASH</span></h2>



<p class="wp-block-paragraph">前回のスクリプトは、<a href="https://www.kazuban.com/blog/mirror-site-v2/#toc9">2020年に紹介した</a>コマンド操作をネット情報を参考にスクリプト化しましたが、今回はこのスクリプトをAIに投げて、最新のBASH構文への変換を教えてもらいながら作成しました。<br>投稿のスクリプト類はちょっと長くなりましたが、全てコピペできるようにしました。<br>また、開発途中ではBASHで一行づつのデバッグもやってみました。</p>



<h2 class="wp-block-heading"><span id="toc2">デバッグ</span></h2>



<p class="wp-block-paragraph">編集はVSCodeを利用したので、デバッグプラグインもインストールしてみましたが、あまり思ったように動いてくれませんでした。<br>AIに聞いてみると、BASH自体にも、構文チェックやステップデバッグができる機能があるようです</p>



<h3 class="wp-block-heading"><span id="toc3">shellcheck</span></h3>



<p class="wp-block-paragraph"><span class="inline-button-white-black"><code>shellcheck [スクリプト名.sh]</code></span>のようにコマンド実行するだけで、スクリプトのバグや構文エラーを簡単にチェックできます。<br>パッケージ名は、キャメルケース的書き方「<strong>S</strong>hell<strong>C</strong>heck」になるので注意が必要です</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-38"><code>sudo dnf install ShellCheck</code></pre>



<p class="wp-block-paragraph">もしパッケージが見つからない場合には、EPELリポジトリが有効になっていない可能性があるのでEPELを有効化した上で再度インストール</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-39"><code>sudo dnf install epel-release
sudo dnf install ShellCheck</code></pre>



<p class="wp-block-paragraph">shellcheck は、スクリプトのバグや構文エラーを検出してエラーコードと共に表示してくれます。<br>標準では致命的でない場合でも警告を出してくるのでちょっとうるさく感じる事もありますが、<br>エラーコードをAIに聞くことでより安全なコードの書き方の学習にもなります</p>



<h3 class="wp-block-heading"><span id="toc4">set コマンド</span></h3>



<p class="wp-block-paragraph">Bashの <code>set</code> コマンドは、シェルの動作やオプションを設定・変更するためのコマンドです。<br>主にスクリプトの安全運転モードやデバッグのために、シェルの冒頭でオプションと組み合わせて使用されます<br>・set -euo pipefail<br>実務でよく使われる定番のオプション<br>これにより、スクリプト実行時のバグや予期せぬトラブルを大幅に減らせます<br><br>・<strong><code>set -x</code></strong>: デバッグ開始<br>実行されるコマンドや変数の展開結果をすべて画面（標準エラー出力）に表示<br><br>・<strong><code>set +x</code></strong>: デバッグ開始<br>実行トレース出力を停止<br><br>・trap &#8216;read -p &#8220;STEP&gt; &#8221; &lt; /dev/tty&#8217; DEBUG<br>実行中、すべてのコマンドを実行する直前で指定文字（STEP&gt;）プロンプトで一時停止<br><br>・export PS4=&#8217;+ ${LINENO}: &#8216;<br>デバッグモード（<code>set -x</code>）で実行されるコマンドを表示する際、そのコマンドのスクリプトでの行番号を出力に含める設定</p>



<p class="wp-block-paragraph">これらコードをスクリプト上部で実行しておくことで、シェルスクリプトのバグの原因特定が早くなります。<br>サンプルコードを書いてみました。</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-40"><code>#!/bin/bash

set -euo pipefail
# --- debug mode: DEBUGGING=1 で有効 ---
DEBUGGING=1

if &#91;&#91; $DEBUGGING == "1" ]]; then
  echo "Debug mode is 'true' !! "
  export PS4='+ ${LINENO}: '
  set -x
  trap 'read -p "STEP&gt; " &lt; /dev/tty' DEBUG
else
  echo "Debug mode is 'false' !! "
fi

# テスト用コード
echo "最初の処理"
x=10
y=20
result=$((x + y))
echo "結果は $result"</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph">このコードを実行すると、デバッグの状況が体験できます</p>



<p class="wp-block-paragraph">次に今回作成したWordPressのバックアップ＆リストアのスクリプトを紹介します<br>デバッグコードは、Header.sh に別スクリプトにして、呼び出す形式にしました。</p>



<h2 class="wp-block-heading"><span id="toc5">スクリプト構成</span></h2>



<p class="wp-block-paragraph">WordPressのバックアップは、大きく分けて「ファイル（サーバー内のデータ）」と「データベース（MySQL/MariaDB）」の2つが必要になります。<br>前回スクリプトは、昔の経験とネット検索を参考に、自分で作成しましたが<br>今回は、BASHもかなり進化しているみたいなので、AIのサポートで最新の構文で書き直しました。<br>バックアップファイルやスクリプトの構成は<br>・「ユーザーホーム」内に、「Backup」ディレクトリを作成<br>・「Backup」内に、「WordPress」と「bin」ディレクトリを作成<br>・「WordPress」内にWordPress パッケージをインストールしたディレクトリ名（筆者環境では「blog」）を作成します<br>・「blog」内に、データベースとサーバー内データのバックアップを保存します<br>・「bin」内に実行スクリプトを保存します</p>



<pre class="wp-block-preformatted">.[ユーザーホームディレクトリ]<br>├── Backup #「バックアップデータを保存する」<br>│   ├── WordPress #「WordPerss関連データ」<br>│   │   └── blog #「blog内のバックアップデータ」<br>│   │       ├── 20260530-MariaDB.bak       # データベースバックアップ<br>│   │       ├── 20260530-Wp-content.tar.gz # WordPressコンテンツ<br>│   │       ├── mariadb_backup.log<br>│   │       └── wp_backup.log<br>│   ├── bin #「スクリプト」<br>│   │   ├── Header.sh                #「デバッグ用のスクリプト」<br>│   │   ├── MariaDB_Backup.sh        #「データベースのバックアップ」<br>│   │   ├── MariaDB_Restore.sh       #「データベースのリストア」<br>│   │   ├── Tidyup_backfile.sh       #「バックアップデータの整理」<br>│   │   ├── WordPress_Config_Data.sh #「バックアップ環境の設定」<br>│   │   ├── Wp-Backup.sh             #「バックアップ用メインスクリプト」<br>│   │   ├── Wp-Content_Backup.sh     #「WordPressデータのバックアップ」<br>│   │   ├── Wp-Content_Restore.sh    #「WordPressデータのリストア」<br>│   │   └── Wp-Restore.sh            #「リストア用メインスクリプト」</pre>



<h3 class="wp-block-heading"><span id="toc6">WordPress_Config_Data.sh : 変数設定</span></h3>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-41"><code>#!/bin/bash
#  WoredPressバックアップ設定ファイル
#    WordPress_Config_Data.sh    2026/05 by Kazuban
#------------------------------------
export USER="kazuban"
export USER_DIR="/home/${USER}"
export SUB_DIR="blog"
export DOCUMEN_ROOT="/home/www/html"
#----- MariaDB ----------------------
export MYSQL_ROOT_PASSWD="hogehoge_passwd"
export DATABASE="WpDb"
export MYSQL_USER="WpAdmin"
export MYSQL_USER_PASSWD="WpPasswd"
#----- WordPress --------------------
export WP_CONTENT_DIR="wp-content"
export WP_CONTENT_FILENAME="Wp-content"
export WP_CONTENT_PATH="/home/www/html/${SUB_DIR}/${WP_CONTENT_DIR}"
export WP_CONTENT_OWNER="apache:apache"</code></pre>



<h3 class="wp-block-heading"><span id="toc7">Wp-Backup.sh : データベース＆WordPressコンテンツのバックアップ</span></h3>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-42"><code>#!/bin/bash
#  WoredPress のバックアップ
#    データベース(Mysql)とサーバーデータ(wp-content)
#  Wp-Backup.sh    2026/05 by Kazuban
#------------------------------------
#--- debug mode, set "DEBUG=1". -----
export DEBUG=
#------------------------------------
export CALLER_SCRIPT="$0"
#export SCRIPT_DIR=$(dirname "$(realpath "$0")")
#shellscriptで警告でたので、AIに聞くとこの書き方が安全らしい
SCRIPT_DIR=$(dirname "$(readlink -f "${BASH_SOURCE&#91;0]}")")
export SCRIPT_DIR
#------------------------------------
source "${SCRIPT_DIR}/Header.sh"
source "${SCRIPT_DIR}/WordPress_Config_Data.sh"
export BACKUP_DIR="${USER_DIR}/Backup/WordPress/${SUB_DIR}"
#---- MariaDB -----------------------
export MYSQL_BACKUP_SCRIPT="${SCRIPT_DIR}/MariaDB_Backup.sh"
export MYSQL_LOG="${BACKUP_DIR}/mariadb_backup.log"
#---- WordPress ---------------------
#export BACKUP_SOURCE_DIR="${DOCUMEN_ROOT}/${SUB_DIR}/wp-content"
export WP_BACKUP_SCRIPT="${SCRIPT_DIR}/Wp-Content_Backup.sh"
export BACKUP_SOURCE_DIR="${DOCUMEN_ROOT}/${SUB_DIR}/${WP_CONTENT_DIR}"
export WP_LOG="${BACKUP_DIR}/wp_backup.log"
#------------------------------------
export TIDY_UP_SCRIPT="${SCRIPT_DIR}/Tidyup_backfile.sh"
export DAYS_AGO="5"
#-----　関数定義 -----------------------
user_dir=$(pwd)
echo $user_dir
# スクリプト終了時に実行させたい場合はここで再定義
cleanup() {
#  echo "Wp-Backup 終了処理"
  :
}
check_backup_dir(){
  #$BACKUP_DIRが存在しない場合には作成
  mkdir -p $BACKUP_DIR 
}
cmd_mariadb()   { check_backup_dir; $MYSQL_BACKUP_SCRIPT; }
cmd_wordpress() { check_backup_dir; $WP_BACKUP_SCRIPT; }
cmd_all()       { cmd_mariadb; cmd_wordpress; }
cmd_help() {
  echo "--- WordPress Backup Script ---"
  echo "Directory: ${SCRIPT_DIR}"
  echo "Usage: $0 {db|wp|all|help}"
  echo "  db   = データベース(MariaDB)"
  echo "  wp   = Word Press (Wp-Content)"
  echo "  all  = db + wp"
  echo "  help = オプション"
}

#-----　メインプログラム　-------------
#------------------------------------
case "${1:-}" in
  db)        cmd_mariadb   ;;
  wp)        cmd_wordpress ;;
  all)       cmd_all       ;;
  help|"")   cmd_help      ;;
  *)
    echo "Unknown command: $1"
    cmd_help
    exit 1
    ;;
esac
</code></pre>



<h3 class="wp-block-heading"><span id="toc8">MariaDB_Backup.sh : データベースバックアップ（Wp-Backup.shから呼ばれる）</span></h3>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-43"><code>#!/bin/bash
#  WoredPress のデータベースバックアップ
#    MariaDB_Backup.sh    2026/05 by Kazuban
#------------------------------------
# 直接実行ガード（呼び出し元スクリプトからのみ実行可）
if &#91;&#91; -z "${CALLER_SCRIPT:-}" ]]; then
  echo "直接実行はできません。"
  echo "&#91;WP-Backup.sh db] から呼び出してください。"
  exit 1
fi
#------------------------------------
source "${SCRIPT_DIR}/Header.sh"
#------------------------------------
# --- 関数定義 ---
usage() {
  echo "使用方法: ${SCRIPT_NAME:-$(basename "$0")}"
  echo "  データベース(MariaDB)をバックアップし、古いファイルを整理します。"
  exit 0
}

log() {
  local message="$1"
  echo "$(date '+%Y-%m-%d %H:%M:%S') ${message}" | tee -a "${MYSQL_LOG}"
}

failed() {
  echo "エラー: $1" &gt;&amp;2
  log "ERROR: $1"
  exit 1
}

# バックアップファイル名を生成する（同名ファイルがあれば連番を付加）
make_filename() {
  local date_str
  date_str=$(date '+%Y%m%d')
  local basename="-MariaDB.bak"
  local filename="${date_str}${basename}"
  local i=1
  while &#91;&#91; -e "${BACKUP_DIR}/${filename}" ]]; do
    filename="${date_str}-${i}${basename}"
    (( i++ )) || true
  done
  echo "${filename}"
}

# --- ヘルプ ---
if &#91;&#91; "${1:-}" == "-?" || "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then
  usage
fi

# --- 事前チェック ---
&#91;&#91; -d "${BACKUP_DIR}" ]]      || failed "バックアップ先が見つかりません: ${BACKUP_DIR}"
&#91;&#91; -x "${TIDY_UP_SCRIPT}" ]]  || failed "整理スクリプトが見つかりません: ${TIDY_UP_SCRIPT}"

# --- ファイル名決定 ---
FILENAME=$(make_filename)
BACKUP_PATH="${BACKUP_DIR}/${FILENAME}"

# --- バックアップ実行 ---
log "MariaDB バックアップ開始: ${FILENAME}"
echo "MariaDB を ${FILENAME} にバックアップします。"

if mariadb-dump \
    --user="${MYSQL_USER}" \
    --password="${MYSQL_USER_PASSWD}" \
    --host=localhost \
    --all-databases \
    --single-transaction \
    --quick \
    &gt; "${BACKUP_PATH}" \
    2&gt;&gt; "${MYSQL_LOG}"; then
  log "バックアップ成功: ${FILENAME} ($(du -sh "${BACKUP_PATH}" | cut -f1))"
else
  failed "mariadb-dump コマンドが失敗しました"
fi

# --- 古いファイルの整理 ---
log "古いバックアップを整理します（${DAYS_AGO} 日以前）"
"${TIDY_UP_SCRIPT}" "${BACKUP_DIR}" "${DAYS_AGO}"

log "MariaDB バックアップ完了"
echo "MariaDB Backup Complete."</code></pre>



<h3 class="wp-block-heading"><span id="toc9">Wp-Content_Backup.sh : WordPressコンテンツバックアップ（Wp-Backup.shから呼ばれる）</span></h3>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-44"><code>#!/bin/bash
#  wp-content ディレクトリのバックアップスクリプト
#    WP-content_Backup.sh    2026/05 by Kazuban
#------------------------------------
# 直接実行ガード（呼び出し元スクリプトからのみ実行可）
if &#91;&#91; -z "${CALLER_SCRIPT:-}" ]]; then
  echo "直接実行はできません。"
  echo "&#91;WP-Backup.sh wp] から呼び出してください。"
  exit 1
fi
#------------------------------------
readonly SCRIPT_NAME="$(basename "$0")"
#------------------------------------
source "${SCRIPT_DIR}/Header.sh"
#------------------------------------
# スクリプト終了時に実行させたい場合はここで再定義
cleanup() {
#  echo "Wp-Backup 終了処理"
  :
}
#------------------------------------
# --- 関数定義 ---
usage() {
  echo "使用方法: ${SCRIPT_NAME}"
  echo "  wp-content ディレクトリをバックアップし、古いファイルを整理します。"
  exit 0
}

log() {
  local message="$1"
  echo "$(date '+%Y-%m-%d %H:%M:%S') ${message}" | tee -a "${WP_LOG}"
}

failed() {
  echo "エラー: $1" &gt;&amp;2
  log "ERROR: $1"
  exit 1
}

# バックアップファイル名を生成する（同名ファイルがあれば連番を付加）
make_filename() {
  local date_str
  date_str=$(date '+%Y%m%d')
  local basename="-Wp-content.tar.gz"
  local filename="${date_str}${basename}"
  local i=1
  while &#91;&#91; -e "${BACKUP_DIR}/${filename}" ]]; do
    filename="${date_str}-${i}${basename}"
    (( i++ )) || true
  done
  echo "${filename}"
}

# --- ヘルプ ---
if &#91;&#91; "${1:-}" == "-?" || "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then
  usage
fi

# --- 事前チェック ---
&#91;&#91; -d "${BACKUP_DIR}" ]]   || failed "バックアップ先が見つかりません: ${BACKUP_DIR}"
&#91;&#91; -d "${BACKUP_SOURCE_DIR}" ]]  || failed "バックアップ元が見つかりません: ${BACKUP_SOURCE_DIR}"
&#91;&#91; -x "${TIDY_UP_SCRIPT}" ]]  || failed "整理スクリプトが見つかりません: ${TIDY_UP_SCRIPT}"

# --- ファイル名決定 ---
FILENAME=$(make_filename)
DEST="${BACKUP_DIR}/${FILENAME}"

# --- バックアップ実行 ---
log "WordPress バックアップ開始:"
log "${BACKUP_SOURCE_DIR} → ${DEST}"
echo "WordPress Backup Starting..."

#echo "バックアップファイル：${DEST}"
#echo "sudo chown ${USER}: ${DEST}"
#exit 1
if sudo tar \
    --create \
    --gzip \
    --file="${DEST}" \
    "${BACKUP_SOURCE_DIR}"; then # \
    #2&gt;&gt; "${WP_LOG}"; then
  echo "バックアップファイル：${DEST}"
  echo "sudo chown ${USER}: ${DEST}"
  sudo chown ${USER}: ${DEST}
  log "バックアップ成功: ${FILENAME} ($(du -sh "${DEST}" | cut -f1))"
else
  failed "tar コマンドが失敗しました"
fi

# --- 古いファイルの整理 ---
log "古いバックアップを整理します（${DAYS_AGO} 日以前）"
"${TIDY_UP_SCRIPT}" "${BACKUP_DIR}" "${DAYS_AGO}"

log "WordPress バックアップ完了"
echo "WordPress Backup Complete."</code></pre>



<h3 class="wp-block-heading"><span id="toc10">Wp-Restore.sh : データベース＆WordPressコンテンツの復元</span></h3>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-45"><code>#!/bin/bash
#  WoredPress の復元
#    データベース(Mysql)とサーバーデータ(wp-content)
#  Wp-Restore.sh    2026/05 by Kazuban
#------------------------------------
#--- debug mode, set "DEBUG=1". -----
export DEBUG=
#------------------------------------
export CALLER_SCRIPT="$0"
#export SCRIPT_DIR=$(dirname "$(realpath "$0")")
SCRIPT_DIR=$(dirname "$(readlink -f "${BASH_SOURCE&#91;0]}")")
export SCRIPT_DIR
#------------------------------------
source "${SCRIPT_DIR}/Header.sh"
source "${SCRIPT_DIR}/WordPress_Config_Data.sh"
export BACKUP_DIR="${USER_DIR}/Backup/WordPress/${SUB_DIR}"
#---- MariaDB -----------------------
export MYSQL_RESTORE_SCRIPT="${SCRIPT_DIR}/MariaDB_Restore.sh"
export PRE_BACKUP_FILE="Pre-Backup.bak"
#---- WordPress ---------------------
export WP_RESTORE_SCRIPT="${SCRIPT_DIR}/Wp-Content_Restore.sh"
#------------------------------------
export PRE_BACKUP="Y"    # リストア前に現行 wp-content を退避するか Y/N
#-----　関数定義 -----------------------
#user_dir=$(pwd)
#echo $user_dir
# スクリプト終了時に実行させたい場合はここで再定義
cleanup() {
#  echo "Wp-Backup 終了処理"
  :
}
check_backup_dir(){
  if &#91; ! -d $BACKUP_DIR ]; then
    echo "バックアップディレクトリがありません！"
    exit 0 
  fi
}
cmd_mariadb()   { check_backup_dir; $MYSQL_RESTORE_SCRIPT; }
cmd_wordpress() { check_backup_dir; $WP_RESTORE_SCRIPT; }
cmd_all()       { cmd_mariadb; cmd_wordpress; }
cmd_help() {
  echo "--- WordPress Restor Script ---"
  echo "Directory: ${SCRIPT_DIR}"
  echo "Usage: $0 {db|wp|all|help}"
  echo "  db   = データベース(MariaDB)"
  echo "  wp   = Word Press (Wp-Content)"
  echo "  all  = db + wp"
  echo "  help = オプション"
}

#-----　メインプログラム　-------------
#------------------------------------
case "${1:-}" in
  db)        cmd_mariadb   ;;
  wp)        cmd_wordpress ;;
  all)       cmd_all       ;;
  help|"")   cmd_help      ;;
  *)
    echo "Unknown command: $1"
    cmd_help
    exit 1
    ;;
esac
</code></pre>



<h3 class="wp-block-heading"><span id="toc11">MariaDB_Restore.sh データベース復元（Wp-Restore.shから呼ばれる）</span></h3>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-46"><code>#!/bin/bash
#  WoredPress のデータベース復元スクリプト
#    MariaDB_Restore.sh    2026/05 by Kazuban
#------------------------------------
# 直接実行ガード（呼び出し元スクリプトからのみ実行可）
if &#91;&#91; -z "${CALLER_SCRIPT:-}" ]]; then
  echo "直接実行はできません。"
  echo "&#91;WP-Backup.sh db] から呼び出してください。"
  exit 1
fi
# --- debug mode: DEBUG=1 で有効 ---
#DEBUG=
PRE_BACKUP="Y"   # リストア前にバックアップを取るか Y/N
PRE_BACKUP_FILE="Pre-Backup.bak"
#------------------------------------
export SCRIPT_DIR=$(dirname "$(realpath "$0")")
#------------------------------------
source "${SCRIPT_DIR}/Header.sh"
source "${SCRIPT_DIR}/WordPress_Config_Data.sh"
#export BACKUP_DIR="${USER_DIR}/Backup/WordPress/${SUB_DIR}"
#------------------------------------

# ---- 関数定義 ---------------------------------------
# バックアップファイルの一覧を配列に格納する
load_backup_files() {
  BACKUP_FILES=()
  while IFS= read -r f; do
    BACKUP_FILES+=("$(basename "$f")")
  #done &lt; &lt;(find "${BACKUP_DIR}" -maxdepth 1 -name "*.bak" | sort)
  done &lt; &lt;(find "${BACKUP_DIR}" -maxdepth 1 -name "*-MariaDB.bak" | sort)
}

# 番号付きリストを表示する
list_backups() {
  echo "--------------------"
  echo "バックアップディレクトリ: ${BACKUP_DIR}"
  echo "--------------------"

  # --- # は個数を表し、&#91;@] は配列のすべての要素
  if &#91;&#91; ${#BACKUP_FILES&#91;@]} -eq 0 ]]; then
    echo "（バックアップファイルが見つかりません）"
  else
    local i=1
    for f in "${BACKUP_FILES&#91;@]}"; do
      printf "  &#91;%d] %s\n" "$i" "$f"
      (( i++ )) || true   # set -e 対策: (( )) は 0 になると終了コード 1 を返すため
    done
  fi
  echo "--------------------"
}

# 入力値（番号 or ファイル名）からファイル名を解決して返す
resolve_input() {
  local input="$1"

  # 数字のみ → 番号として解釈
  if &#91;&#91; "$input" =~ ^&#91;0-9]+$ ]]; then
    local idx=$(( input - 1 ))
    if (( idx &lt; 0 || idx &gt;= ${#BACKUP_FILES&#91;@]} )); then
      echo "エラー: 番号 ${input} は範囲外です（1〜${#BACKUP_FILES&#91;@]}）" &gt;&amp;2
      exit 1
    fi
    echo "${BACKUP_FILES&#91;$idx]}"
  else
    # 文字列 → ファイル名として解釈（リスト内に存在するか確認）
    local f
    for f in "${BACKUP_FILES&#91;@]}"; do
      if &#91;&#91; "$f" == "$input" ]]; then
        echo "$f"
        return
      fi
    done
    echo "エラー: ファイルが見つかりません: ${input}" &gt;&amp;2
    exit 1
  fi
}

# 対話形式でファイルを選択させる
select_backup_file() {
  local selected=""
  while &#91;&#91; -z "$selected" ]]; do
    read -r -p "番号またはファイル名を入力してください (q で終了): " INPUT
    case "$INPUT" in
      &#91;qQ])
        kill -USR1 $$    # 親プロセス（スクリプト自身）にシグナルを送る
        exit 1;;
      "")   echo "入力してください" ;;
      *)    selected=$(resolve_input "$INPUT") ;;
    esac
  done
  echo "$selected"
}

usage() {
  echo "使い方: $(basename "$0") &#91;バックアップファイル名 or 番号]"
  echo "  引数なしで起動すると対話形式で選択できます。"
  echo "--------------------"
  list_backups
  exit 1
}

run_pre_backup() {
  local date_str
  date_str=$(date '+%Y%m%d-%H%M')
  local pre_backup_path="${BACKUP_DIR}/${date_str}-${PRE_BACKUP_FILE}"

  echo "--------------------"
  echo "-- 事前バックアップを開始します... --"

  #mysqldump \
  mariadb-dump \
    --user="${MYSQL_USER}" \
    --password="${MYSQL_USER_PASSWD}" \
    --host=localhost \
    --all-databases \
    --single-transaction \
    --quick \
    &gt; "${pre_backup_path}"

  echo "-- 事前バックアップ完了: ${pre_backup_path} --"
  echo "--------------------"
}

run_restore() {
  local backup_file="${BACKUP_DIR}/${1}"

  echo "--------------------"
  echo "-- リストア対象: ${1} --"
  echo "-- データベース: ${DATABASE} --"
  echo "--------------------"

  read -r -p "リストアを実行しますか？ (y/n): " YN
  case "${YN}" in
    &#91;yY])
      echo "-- リストアを開始します... --"
      #mysql \
      mariadb \
        --user=root \
        --password="${MYSQL_ROOT_PASSWD}" \
        "${DATABASE}" \
        &lt; "${backup_file}"
      echo "-- リストア完了 --"
      ;;
    &#91;nN])
      kill -USR1 $$    # 親プロセス（スクリプト自身）にシグナルを送る
      exit 0
      echo "-- 中止しました --"
      exit 0
      ;;
    *)
      echo "エラー: y または n を入力してください" &gt;&amp;2
      exit 1
      ;;
  esac
}

# ----- メイン処理 --------------------------------------------

# バックアップディレクトリの存在確認
if &#91;&#91; ! -d "${BACKUP_DIR}" ]]; then
  echo "エラー: バックアップディレクトリが存在しません: ${BACKUP_DIR}" &gt;&amp;2
  exit 1
fi

# ファイル一覧をグローバル配列に読み込む
# declare 変数の属性やタイプ -a 「配列(Array)」
declare -a BACKUP_FILES
load_backup_files

# ヘルプ
if &#91;&#91; "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then
  usage
fi

# ファイル選択：引数あり → 解決、なし → 対話形式
if &#91;&#91; $# -gt 0 ]]; then
  list_backups
  SELECTED_FILE=$(resolve_input "$1")
else
  list_backups
  SELECTED_FILE=$(select_backup_file)
fi

echo "-- 選択されたファイル: ${SELECTED_FILE} --"

# 事前バックアップ
if &#91;&#91; "${PRE_BACKUP}" =~ ^&#91;Yy]$ ]]; then
  run_pre_backup
fi

# リストア実行
run_restore "${SELECTED_FILE}"
</code></pre>



<h3 class="wp-block-heading"><span id="toc12">Wp-Content_Restore.sh: WordPressコンテンツ復元（Wp-Restore.shから呼ばれる）</span></h3>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-47"><code>#!/bin/bash
#  wp-content ディレクトリの復元スクリプト
#    WP-Content_Restore.sh    2026/05 by Kazuban
#------------------------------------
# 直接実行ガード（呼び出し元スクリプトからのみ実行可）
if &#91;&#91; -z "${CALLER_SCRIPT:-}" ]]; then
  echo "直接実行はできません。"
  echo "&#91;WP-Backup.sh db] から呼び出してください。"
  exit 1
fi
# --- debug mode: DEBUG=1 で有効 ---
#export DEBUG=
PRE_BACKUP="Y"    # リストア前に現行 wp-content を退避するか Y/N
#------------------------------------
export SCRIPT_DIR=$(dirname "$(realpath "$0")")
#------------------------------------
source "${SCRIPT_DIR}/Header.sh"
source "${SCRIPT_DIR}/WordPress_Config_Data.sh"
#------------------------------------

# --- 関数定義 ---
# バックアップファイルの一覧を配列に格納する
load_backup_files() {
  BACKUP_FILES=()
  cmd="find ${BACKUP_DIR} -maxdepth 1 -name *-${WP_CONTENT_DIR}.tar.gz"  #${WP_CONTENT_DIR}
  while IFS= read -r f; do
    BACKUP_FILES+=("$(basename "$f")")
  done &lt; &lt;(find "${BACKUP_DIR}" -maxdepth 1 -name "*-${WP_CONTENT_FILENAME}.tar.gz" | sort)
}

# 番号付きリストを表示する
list_backups() {
  echo "--------------------"
  echo "バックアップディレクトリ: ${BACKUP_DIR}"
  echo "--------------------"

  if &#91;&#91; ${#BACKUP_FILES&#91;@]} -eq 0 ]]; then
    echo "（バックアップファイルが見つかりません）" &gt;&amp;2
  else
    local i=1
    for f in "${BACKUP_FILES&#91;@]}"; do
      printf "  &#91;%d] %s\n" "$i" "$f"
      (( i++ )) || true   # set -e 対策: (( )) は 0 になると終了コード 1 を返すため
    done
  fi
  echo "--------------------"
}

# 入力値（番号 or ファイル名）からファイル名を解決して返す
resolve_input() {
  local input="$1"

  # 数字のみ → 番号として解釈
  if &#91;&#91; "$input" =~ ^&#91;0-9]+$ ]]; then
    local idx=$(( input - 1 ))
    if (( idx &lt; 0 || idx &gt;= ${#BACKUP_FILES&#91;@]} )); then
      echo "エラー: 番号 ${input} は範囲外です（1〜${#BACKUP_FILES&#91;@]}）" &gt;&amp;2
      exit 1
    fi
    echo "${BACKUP_FILES&#91;$idx]}"
  else
    # 文字列 → ファイル名として解釈（リスト内に存在するか確認）
    local f
    for f in "${BACKUP_FILES&#91;@]}"; do
      if &#91;&#91; "$f" == "$input" ]]; then
        echo "$f"
        return
      fi
    done
    echo "エラー: ファイルが見つかりません: ${input}" &gt;&amp;2
    exit 1
  fi
}

# 対話形式でファイルを選択させる
select_backup_file() {
  local selected=""
  while &#91;&#91; -z "$selected" ]]; do
    read -r -p "番号またはファイル名を入力してください (q で終了): " INPUT
    case "$INPUT" in
      &#91;qQ])
        kill -USR1 $$
        exit 1 ;;
      "")   echo "入力してください" ;;
      *)    selected=$(resolve_input "$INPUT") ;;
    esac
  done
  echo "$selected"
}

# 使い方表示
usage() {
  echo "使い方: $(basename "$0") &#91;バックアップファイル名 or 番号]"
  echo "  引数なしで起動すると対話形式で選択できます。"
  echo "--------------------"
  list_backups
  exit 1
}

# 既存 wp-content を日付付きディレクトリ名にリネームして退避する
run_pre_backup() {
  local date_str
  date_str=$(date '+%Y%m%d-%H%M')
  local backup_path="${WP_CONTENT_PATH}-${date_str}.bak"

  echo "--------------------"
  echo "-- 事前バックアップ（退避）を開始します... --"
  echo "-- ${WP_CONTENT_PATH} → ${backup_path} --"
  sudo mv "${WP_CONTENT_PATH}" "${backup_path}"
  echo "-- 事前バックアップ完了 --"
  echo "--------------------"
}

# リストア実行
run_restore() {
  local backup_file="${BACKUP_DIR}/$1"
  local work_dir
  #work_dir=$(mktemp -d) #添付ディレクトリの利用
  work_dir=$BACKUP_DIR

  echo "--------------------"
  echo "-- リストア対象: $1 --"
  echo "-- 展開先 (${WP_CONTENT_DIR}): ${WP_CONTENT_PATH} --"
  echo "--------------------"

  read -r -p "リストアを実行しますか？ (y/n): " YN
  case "${YN}" in
    &#91;yY])
      echo "-- リストアを開始します... --"

      # 1. アーカイブ内の wp-content の階層数を確認
      echo "-- 展開中: ${backup_file} --"
      local wp_path strip_count

      list=$(tar tzf "${backup_file}")
      wp_path=$(echo "$list" | grep -m1 "${WP_CONTENT_DIR}/$" || true)
      echo "------ $wp_path --------"
      if &#91;&#91; -z "${wp_path}" ]]; then
        echo "エラー: アーカイブ内に ${WP_CONTENT_DIR} ディレクトリが見つかりません" &gt;&amp;2
        exit 1
      fi
      # パスの / の数から除去する階層数を算出
      # 例: home/www/html/sweb01/wp-content/ → スラッシュ5個 → strip=4
      strip_count=$(echo "${wp_path}" | tr -cd '/' | wc -c)
      strip_count=$(( strip_count - 1 ))
      echo $strip_count
      #exit 1
      if &#91;&#91; $strip_count &lt; 0 ]]; then
        echo "エラー: 階層がありません" &gt;&amp;2
        #echo "エラー: アーカイブ内に wp-content ディレクトリが見つかりません"
        exit 1
      fi
      #DIR="${work_dir}/wp-content"
      DIR=${work_dir}
      echo "${DIR}がない場合には作成します"
      mkdir -p "$DIR"
      # --strip-components で wp-content/ を作業ディレクトリ直下に展開
      tar xvzf "${backup_file}" -C "${DIR}" \
        --strip-components="${strip_count}"
      ls -la $DIR

      # 所定の場所に配置してオーナーを設定
      echo sudo mv "${work_dir}/${WP_CONTENT_DIR}" "${WP_CONTENT_PATH}"
      echo sudo chown -R "${WP_CONTENT_OWNER}" "${WP_CONTENT_PATH}/"
      sudo mv "${work_dir}/${WP_CONTENT_DIR}" "${WP_CONTENT_PATH}"
      sudo chown -R "${WP_CONTENT_OWNER}" "${WP_CONTENT_PATH}/"

      echo "-- リストア完了 --"
      # スクリプト終了時に作業ディレクトリを削除
      #trap 'rm -rf "${work_dir}"' EXIT

      ;;
    &#91;nN])
      kill -USR1 $$
      exit 0
      ;;
    *)
      echo "エラー: y または n を入力してください" &gt;&amp;2
      exit 1
      ;;
  esac
}
cleanup() {
  echo Clean up!!
  echo ${BACKUP_DIR}
  #read -r -p "${BACKUP_DIR}/${WP_CONTENT_DIR} 削除しますか？ (Y/N): " INPUT
  #  case "$INPUT" in
  #    &#91;Yy])
  #      rm -rf "${BACKUP_DIR}/${WP_CONTENT_DIR}"  
  #  esac
}

# --- メイン処理 ---

# バックアップディレクトリの存在確認
if &#91;&#91; ! -d "${BACKUP_DIR}" ]]; then
  echo "エラー: バックアップディレクトリが存在しません: ${BACKUP_DIR}" &gt;&amp;2
  exit 1
fi

# ファイル一覧をグローバル配列に読み込む
declare -a BACKUP_FILES
load_backup_files

# ヘルプ
if &#91;&#91; "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then
  usage
fi

# ファイル選択：引数あり → 解決、なし → 対話形式
if &#91;&#91; $# -gt 0 ]]; then
  list_backups
  SELECTED_FILE=$(resolve_input "$1")
else
  list_backups
  SELECTED_FILE=$(select_backup_file)
fi

echo "-- 選択されたファイル: ${SELECTED_FILE} --"

# 事前バックアップ（現行 wp-content の退避）
if &#91;&#91; "${PRE_BACKUP}" =~ ^&#91;Yy]$ ]]; then
  run_pre_backup
fi

# リストア実行
run_restore "${SELECTED_FILE}"</code></pre>



<h3 class="wp-block-heading"><span id="toc13">Header.sh : デバッグモード仕様（変数 DEBUG=1 で有効）</span></h3>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-48"><code>#!/bin/bash
#
#  Header.sh    2026/05 by AI &amp; Kazuban
#  共通ヘッダー: source で読み込んで使う
#  使い方: source "${SCRIPT_DIR}/Header.sh"
#
#------------------------------------
#-e：失敗で停止：#-u：未定義変数禁止:#pipefail：パイプの途中も検知
set -euo pipefail

# --- traps ---
trap 'echo "-- 中止しました --"; exit 0' USR1
trap 'echo "Error at line $LINENO"; exit 1' ERR
trap cleanup EXIT

# cleanup は呼び出し元スクリプトで上書き可能
cleanup() {
  :
}

# --- debug mode: DEBUG=1 で有効 ---
export DEBUG=${DEBUG:-0}
if &#91;&#91; "$DEBUG" == "1" ]]; then
  echo "Debug mode is 'true' !! "
  export PS4='+ ${LINENO}: '
  set -x
  trap 'read -p "STEP&gt; " &lt; /dev/tty' DEBUG
else
  echo "Debug mode is 'false' !! "
fi
</code></pre>



<h3 class="wp-block-heading"><span id="toc14">Tidyup_backfile.sh : バックアップファイルの整理（引数：対象ディレクトリ・保存日数）</span></h3>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-49"><code>#!/bin/bash
# Delete $DAY days ago from backup
#
#  Tidyup_backfile.sh  by AI &amp; Kazuban 2026/05
#                default 10 days ago
#
#------------------------
# delete_backup - バックアップファイルを整理するスクリプト
# 使用方法: delete_backup &#91;削除対象ディレクトリ] &#91;何日前まで残すか]

#set -euo pipefail
#--- for debag ----------------------
#--- デバッグモード（DEBUG=1 で有効）---
#if &#91;&#91; "${DEBUG:-0}" == "1" ]]; then
#  export PS4='+ ${LINENO}: '
#  set -x
#  trap 'read -p "STEP&gt; " &lt; /dev/tty' DEBUG
#fi

readonly SCRIPT_NAME="$(basename "$0")"

usage() {
    echo "使用方法: ${SCRIPT_NAME} &lt;削除対象ディレクトリ&gt; &#91;保持日数]"
    echo "  削除対象ディレクトリ  : バックアップファイルのあるディレクトリ"
    echo "  保持日数              : 何日前までのファイルを残すか (デフォルト: 10)"
    exit 1
}

# --- 引数チェック ---
if &#91;&#91; $# -lt 1 || "$1" == "-?" || "$1" == "-h" || "$1" == "--help" ]]; then
    usage
fi

TARGET_DIR="$1"
DAYS="${2:-10}"

# --- 数値チェック ---
if ! &#91;&#91; "$DAYS" =~ ^&#91;0-9]+$ ]]; then
    echo "エラー: 保持日数には正の整数を指定してください: ${DAYS}" &gt;&amp;2
    exit 1
fi

# --- ディレクトリ存在チェック ---
if &#91;&#91; ! -d "$TARGET_DIR" ]]; then
    echo "エラー: ディレクトリが見つかりません: ${TARGET_DIR}" &gt;&amp;2
    exit 1
fi

# --- 削除基準日を算出 ---
DEL_DATE="$(date --date="${DAYS} days ago" +%Y%m%d)"
echo "削除基準日: ${DEL_DATE} より前のファイルを削除します (保持日数: ${DAYS}日)"

# --- 対象ファイルの処理 ---
# 数字始まりのファイル名から先頭8桁(YYYYMMDD)を取得して重複排除
while IFS= read -r file_date; do
    if &#91;&#91; "$file_date" &lt; "$DEL_DATE" ]]; then
        echo "削除: ${TARGET_DIR}/${file_date}*"
        rm -f -- "${TARGET_DIR}/${file_date}"*
    fi
done &lt; &lt;(
    ls -- "$TARGET_DIR" \
        | grep -E '^&#91;0-9]' \
        | awk '{ print substr($0, 1, 8) }' \
        | sort -u
)

echo "完了"</code></pre>



<h2 class="wp-block-heading"><span id="toc15">リストアする場合の注意点</span></h2>



<p class="wp-block-paragraph">リストアスクリプトでは、バックアップファイルのリストが表示されますが、<br>必ず、<span class="marker-under-red">データベースとコンテンツのバックアップファイルのリスト番号（日付）は同じにする事</span>をお勧めします<br>また、バックアップサーバーなどへリストアする場合、URLが異なる場合があるかもしれません<br>その時は、<a href="https://www.kazuban.com/blog/mirror-site-v2/#toc12">こちらの作業が必要になる場合があります</a></p>



<p class="wp-block-paragraph">この作業をAIにスクリプト化してもらったのが、下記になります</p>



<h3 class="wp-block-heading"><span id="toc16">update_wp_url.sh</span></h3>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-50"><code>#!/bin/bash

# ==========================
SCRIPT_DIR=$(dirname "$(readlink -f "${BASH_SOURCE&#91;0]}")")
export SCRIPT_DIR
#--- debug mode, set "DEBUG=1". -----
export DEBUG=
#------------------------------------
source "${SCRIPT_DIR}/Header.sh"
source "${SCRIPT_DIR}/WordPress_Config_Data.sh"
# ===== 設定 =====
DB_USER="root"
DB_PASS=${MYSQL_ROOT_PASSWD}
DB_NAME=${DATABASE}
OLD_URL="http://www.hogehoge.com/blog"
NEW_URL="http://www2.hogehoge.com/blog"

# ===== 実行前確認 =====
echo "=== WordPress URL変更スクリプト ==="
echo "DB      : $DB_NAME"
echo "変更前  : $OLD_URL"
echo "変更後  : $NEW_URL"
echo ""
read -p "続行しますか？ (y/N): " confirm
&#91;&#91; "$confirm" != "y" &amp;&amp; "$confirm" != "Y" ]] &amp;&amp; echo "キャンセルしました。" &amp;&amp; exit 0

# ===== 変更前の値を確認 =====
echo ""
echo "--- 変更前 ---"
mysql -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" -e \
  "SELECT option_id, option_name, option_value FROM wp_options WHERE option_name IN ('siteurl', 'home');"

# ===== UPDATE実行 =====
mysql -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" -e \
  "UPDATE wp_options SET option_value = '$NEW_URL' WHERE option_id = 1 OR option_id = 2;"

echo ""
echo "--- 変更後 ---"
mysql -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" -e \
  "SELECT option_id, option_name, option_value FROM wp_options WHERE option_name IN ('siteurl', 'home');"

echo ""
echo "✅ 完了しました。"</code></pre>



<h2 class="wp-block-heading"><span id="toc17">自動バックアップ</span></h2>



<p class="wp-block-paragraph"><a href="https://www.kazuban.com/blog/rokeylinux9-3-wordpress-backup/#toc10">こちらでも、紹介していますが</a>、「crontab」に下記のように設定する事で、毎日２時に自動バックアップできるようになります</p>



<pre class="wp-block-code"><code>00 2 * * *        /home/kazuban/Backup/bin/Wp-Backup.sh all</code></pre>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
