Drupal のバックアップ
こちらの続きになります。
Backup and Migrate
を使って、バックアップを取ろうとしましたが、
Cannot connect to the database because the MySQLi extension is missing.
というエラーが発生しているので、対応します。
MySQLi
MySQLi エクステンションを有効にすれば良いのか?
そのためには、php.ini に、記述を追加する必要がありそうです。
では、php.ini はどこにあるのか。
drupal では、管理画面から、phpinfo の情報を確認することができるようになってます。
サイト/admin/reports/status/php
この中の、「Configuration File (php.ini) Path」の項目に、パスが書かれています。
Dockerコンテナのシェルに入って見てみます。
# ls /usr/local/etc/php
conf.d php.ini-development php.ini-production
むむ・・・php.ini がない。
# php --ini
Configuration File (php.ini) Path: /usr/local/etc/php
Loaded Configuration File: (none)
Scan for additional .ini files in: /usr/local/etc/php/conf.d
Additional .ini files parsed: /usr/local/etc/php/conf.d/docker-php-ext-gd.ini,
/usr/local/etc/php/conf.d/docker-php-ext-opcache.ini,
/usr/local/etc/php/conf.d/docker-php-ext-pdo_mysql.ini,
/usr/local/etc/php/conf.d/docker-php-ext-pdo_pgsql.ini,
/usr/local/etc/php/conf.d/docker-php-ext-sodium.ini,
/usr/local/etc/php/conf.d/docker-php-ext-zip.ini,
/usr/local/etc/php/conf.d/opcache-recommended.ini
単一 php.ini を読むのではなく、/usr/local/etc/php/conf.d フォルダの各ファイルを統合して読む。
その一つ、
# cat /usr/local/etc/php/conf.d/docker-php-ext-pdo_mysql.ini
extension=pdo_mysql.so
では、mysqli を有効化するファイルをも追加してみる。
# cp /usr/local/etc/php/conf.d/docker-php-ext-pdo_mysql.ini /usr/local/etc/php/conf.d/docker-php-ext-mysqli.ini
# sed -i -e "s|extension=pdo_mysql.so|extension=mysqli|" /usr/local/etc/php/conf.d/docker-php-ext-mysqli.ini
# cat /usr/local/etc/php/conf.d/docker-php-ext-mysqli.ini
/extension=mysqli
apache 再起動は、httpd ではなく、apache2
# service httpd restart
httpd: unrecognized service
# service apache2 restart
[....] Restarting Apache httpd web server: apache2Terminated
しかし、変わらない。
コンテナ再起動しても変わらない。
そもそも、このエクステンションがインストールされていない。
# php -i | grep extension_dir
extension_dir => /usr/local/lib/php/extensions/no-debug-non-zts-20190902 => /usr/local/lib/php/extensions/no-debug-non-zts-20190902
sqlite3.extension_dir => no value => no value
# ls /usr/local/lib/php/extensions/no-debug-non-zts-20190902
gd.so opcache.so pdo_mysql.so pdo_pgsql.so sodium.so zip.so
インストールするには?Docker コンテナ内では、これが使える。
# docker-php-ext-install mysqli
・・・
# ls /usr/local/lib/php/extensions/no-debug-non-zts-20190902
gd.so mysqli.so opcache.so pdo_mysql.so pdo_pgsql.so sodium.so zip.so
入ったけど、まだ有効になっていない。
# service apache2 restart
来た!
バックアップファイルのダウンロードができました。
private
しかしサーバ内へのバックアップはできません。
The backup file could not be saved to 'private://backup_migrate/' because your private files system path has not been set.
上記 Backup and Migrate のページでは、
Bug fixes. Please upgrade to 5.0.0, the 8.x-4.x releases will not be supported any further.
と書かれているので、5.0.1 をインストールしました。
Documentation は
Backup and Migrate 7.x
Backup and Migrate 8.x
となっていますが、きっと 8.x を見れば良いのだろうと考えます。
その中の、Backup to Server のところを参考に、サーバを設定します。
Create a directory, writable by the server, but outside the Drupal installation and not accessible over the web.
Drupal インストールの外側ということなので、
# ls /opt
drupal
# mkdir /opt/drupal_private
# ls /opt
drupal drupal_private
In the Drupal settings file, add the absolute path to this directory for the file_private_path variable.
Drupal settings file は
cat /var/www/html/sites/default/settings.php
・・・
/**
* Private file path:
*
* A local file system path where private files will be stored. This directory
* must be absolute, outside of the Drupal installation directory and not
* accessible over the web.
*
* Note: Caches need to be cleared when this value is changed to make the
* private:// stream wrapper available to the system.
*
* See https://www.drupal.org/documentation/modules/file for more information
* about securing private files.
*/
# $settings['file_private_path'] = '';
なので、
sed -i -e "s|# \$settings\['file_private_path'\] = '';|\$settings\['file_private_path'\] = '/opt/drupal_private/';|" /var/www/html/sites/default/settings.php
Navigate to Configuration > File system (or Administration > Configuration > Media > File system to confirm that the settings are correct.
上記は、URLとしては
サイト/admin/config/media/file-system
特にサービス再起動等せずに即時反映されました。
プライベートファイルシステムパス
/opt/drupal_private/
プライベートファイルを格納する、既存のローカルファイルシステムパス。Drupal から書き込み可能で、ウェブからアクセス不可能でなくてはなりません。settings.php で変更する必要があります。
Navigate to Configuration > Performance (or Administration > Configuration > Development > Performance) and click Clear all caches so the file streams are updated.
サイト/admin/config/development/performance
「すべてのキャッシュをクリアー」
Navigate to Configuration > Development > Backup and Migrate > Settings > Destinations. Click Edit to edit the Private files directory destination, or create a new destination. Enter the directory you want to use for backups, such as private://backup_migrate (if it is within the private file system), or the full path to the directory you want to use and save.
サイト/admin/config/development/backup_migrate/settings/destination
この時点で「private://backup_migrate」はセットされているので、このままでよいと思われたが、エラー。ただし、メッセージは変わった。
The backup file could not be saved to 'private://backup_migrate/' because the directory could not be created or cannot be written to. Please make sure your private files directory is writable by the web server.
フォルダも作って、権限も作る。
# mkdir /opt/drupal_private/backup_migrate
# chmod 777 /opt/drupal_private/backup_migrate
# ls -l /opt/drupal_private
total 0
drwxrwxrwx. 2 root root 6 Oct 17 14:37 backup_migrate
できた!
スケジューリング
サイト/admin/config/development/backup_migrate/schedule
毎日実行、3世代保存に変更。有効化のチェックも忘れず。
環境設定 > cron から「cron を実行」してみる。
サイト/admin/config/system/cron
「保存済みバックアップ」で確認できる。
以上!
Author And Source
この問題について(Drupal のバックアップ), 我々は、より多くの情報をここで見つけました https://qiita.com/JQinglong/items/9dc9d5c9e003c86faede著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .