proper backup & restore mediawiki on ubuntu mate - mediawiki

I am trying to create a streamlined approach to backing up and restoring my MediaWiki. My wiki is installed in folder /var/www/html/mediawiki and is running on an Ubuntu Mate 20.10 machine, MediaWiki verson 1.35.1, PHP 7.4.9, and mysql version Server version: 10.3.25-MariaDB-0ubuntu1 Ubuntu 20.10.
Backup:
I installed automysqlbackup and configured it to automatically make gzip backups of my mysql databases, which go into an SMB mounted folder mapped to my NAS (/mnt/wiki-backup)
I manually zipped the entire MediaWiki folder with the following tar command.
tar zcvhf mybackupfilename.tgz /var/www/html/mediawiki
Restore:
To make sure I could restore the wiki, I made a textual change to one of it's pages. Then I restored the MediaWiki's sql database using the following command (which I ran from /mnt/wiki-backup where the backup .sql file was located) where mediauser is the admin name for my wiki database, and mediadb is the name of the database.
sudo mysql -u mediauser -p mediadb < mediadb_2021-03-19_14h22m.Friday.sql
Sure enough, this worked fine - and the page was back to what it was before I made my test textual changes.
My Questions:
Is all text for MediaWiki pages stored in the sql database, and all images stored in the MediaWiki folder structure (e.g. /mediawiki)? From this page this seems to indeed be the case.
How do I restore the /mediawiki folder from the tar I created at step 2. above? Would it simply be the following?
tar zxvhf mybackupfilename.tgz /var/www/html/mediawiki -C /var/www/html/mediawiki
I'd appreciate any other constructive feedback on how best to do this.

Related

Set up Docker to Use a Filesystem Folder to store Databases, UBUNTU?

I just started using Docker (CE), so I am a relative novice.
I installed on UBUNTU 18.04.
sudo apt update
sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install docker-ce
sudo docker run --name some-postgres -v "/home/parallels/Desktop/Orthanc Dropbox/OrthancConfigs/postgres:/var/lib/postgresql/data" -e POSTGRES_PASSWORD=mysecretpassword -d -p 5432:5432 postgres
I then installed DBeaver on UBUNTU, and I am able to connect to postgres after running the image/container (I need to read more to understand the difference). I wanted to configure it to use a local filesystem folder to store the database rather than have them non-persistent when I run the image. There is probably an issue with having a "space" in the Orthanc Dropbox filename, but not sure that I can change that because I'm running their client and it does that automatically. You can use symlinks with Dropbox, but the actual files to sync have to be in the Dropbox folder, not the symlinks. It would be nice if they supported the opposite arrangement.
I see there are quite a few config options, especially when you use a .yaml config file. Ideally, I'll want to start up the Postgres Docker when I boot the system and shut it down when I shut down the system so that the operation is relatively seamless, but I want the database files stored on the system file system or on a mounted file system folder, probably within the Dropbox folder itself because it automatically syncs everything in that folder with the Dropbox Cloud.
If I can get that to work, I'll also probably want to do the same for a LAMP stack (MySQL, Apache, PHP 7.4, also with the DB as above) and for an NGINX server. It would actually even be nice to package NGINX, PHP-FPM & Postgres in my own custom container.
So the goal is:
Custom Docker container with Postgres, NGINX, PHP-FPM 7.4, with DB, web directories and config files on file system.
Custom Docker container with Apache, MySQL, PHP 7.4, with DB, web directories and config files on file system.
I can read the documentation a little further, but I presume this really isn't that difficult, and it seems like there should be some already made Docker images that do something pretty similar.
Another option is to use Docker images/containers for Postgres and MySQL with the database files on my file system, and then just install Apache, NGINX, PHP/PHP-FPM, on my system natively. That way I can use Docker for the Databases and my system for the rest.
So:
Custom Docker container with Postgres, with DB on file system.
Custom Docker container with MySQL, with DB on file system.
I have some .sh scripts to make rolling backups of some database files, so I presume there would be a way to use those with the Docker images if I wanted to, although that might not be necessary with the backup in the Cloud.
Thanks.
Databases, whether MySQL or Postgres, have rather strict requirements on filesystems.
Its unlikely that an archival/sharing based Dropbox connector meets these requirements.
Multiple concurrent instantiates on the same storage there certainly won't be possible.
Recommend running locally and have the backup mechanism push their backups to your Dropbox based storage. That way you'll actually have a backup, in addition to a disaster recovery.

Full backup of GoDaddy site via command-line script

Is there a simple way to do an automated backup of an entire website on a host like GoDaddy via the command-line?
So far, I know I need to backup all the files in my home directory recursively. I could possibly automated SFTP to connect and issue a get -R * command to get the full file dump, or just use SCP.
The other half of the puzzle is getting all of the tables available, mostly WordPress tables. My guess is that maybe there's a command-line command I could issue which dumps the database contents to a flat file, which I could then also pull via SFTP. If such a command exists, my plan is to use a combination of Telnet and EXPECT scripts to login to the GoDaddy site, issue some commands, then disconnect back to my local shell.
The end result should be that I have a folder with all of my server content in it, plus the flat file backup of the SQL database from the server. I know there are WordPress backup plugins, but they tend to provide a slew of ZIP files, when all I want is the raw data directly so I can put it in my private SVN server for backup and versioning.
So my question: how do I extract all of the databases on my GoDaddy server via the command-line to a file?
Thank you.
In the end, I found a working solution.
First, I used 2 separate expect scripts.
Telnet into the server, delete old backups, use mysqldump to extract all tables to a flat file via mysqldump -u db_owner -p --all-databases > output.sql, and create a massive tarball of everything. Logout.
Use SCP to pull the newly created tarball, extract it to a local SVN controlled working copy folder.
Use a second expect script to login to the server and delete the backup. Logout.
From there, I just manually svn add and svn commit as needed.

Cannot find old MySQL databases after upgrading MAMP

I installed Yosemite
Renamed MAMP to MAMP_old
Did a clean install of MAMP
Copied the db folder from old into the the new one
Now none of my databases appear in PHPMyAdmin
Inside the db/mysql folder I see the folder for my old databases, but there are no sql files. For example a Wordpress folder contains .frm files and db.opt files.
I tried doing this (using the link below), but I don't seem to have a mysql folder usr/local/
/usr/local/mysql/bin/mysqldump -u root -p[pass] [db] > [filename].sql
Can't access MySQL databases after upgrade to Mountain Lion (using MAMP)
What should I do to restore my old databases? I have very limited knowledge in this area.
Many thanks
I ran into this problem with upgrading to MAMP PRO 5 from 4. The following article proved invaluable:
https://appsolute.zendesk.com/hc/en-us/articles/215198946-I-upgraded-to-MAMP-PRO-5-and-I-am-missing-databases-
To quote:
Your old MySQL 5.6 data is in
/Library/application support/appsolute/MAMP PRO/db/mysql56_2018_xxxx
To be on the safe side, first make backups of your host data, and your
entire /Library/application support/appsolute/MAMP PRO/db/
To verify this is your old data, look inside of this mysql56_2018_xxx
folder, you should see subdirectories of all of your old databases in
this folder.
If you see missing databases in MAMP PRO 5, you can "reupgrade" your
old data by doing the following.
Quit MAMP PRO
Rename your mysql57 folder to mysql57_back
Make a copy of your mysql56_2018_xxxx folder, name it mysql57.
Start MAMP PRO, start your servers
Run Tools > Upgrade MySQL DB
Notes:
Instructions available online for MAMP (not MAMP PRO) may be misleading.
The above refers not to the /Library inside the package contents of the MAMP PRO app, but /Library from the root of your drive.
In my case the complete original databases were in the folder simply named mysql56. There were additional incomplete date-stamped folders suggestive of failures during the original DB update process.
Here is a link to an article which I think can help anyone in a similar situation:
How to Upgrade MAMP
So the basic idea is that you will need to copy your db files from the old MAMP folder to the new MAMP folder.
Another technique you could use would be do a mysqldump before upgrading, then import that dump file into the new version of MAMP.

Migrating MySQL databases from files only

On a fresh install of MySQL on Mavericks (via Homebrew if that matters) how can I take database files from a back up and migrate them to /usr/local/var/mysql in the new instance? I have a directory for each database and one huge ibdata1 file.
If I move them by a simple file transfer, start the new instance and log in, each database is there however no data is present when I check a table.
it should work if keeping or upgrading server version. Make sure ownership and permissions are correct. Then run mysql_upgrade which will adjust the files.

Restore the mysql database from .frm files

I have dumped all my tables everyweek to got the backup. But later I understand that it is only storing the .frm file of the table. It is not showing .MYD and .MYI files of a table. So I have only my .frm file of the database with me and also mydatabase is innodb. So can I get my database with data in the database?
Yes this is possible. It is not enough you just copy the .frm files to the to the databse folder but you also need to copy the ib_logfiles and ibdata file into your data folder. I have just copy the .frm files and copy those files and just restart the server and my database is restored.
After copying the above files execute the following command -
sudo chown -R mysql:mysql /var/lib/mysql
The above command will change the file owner under mysql and it's folder to MySql user. Which is important for mysql to read the .frm and ibdata files.
Just might be useful for someone:
I could only recover frm files after a disaster, at least I could get the table structure from FRM files by doing the following:
1- create some dummy tables with at least one column and SAME NAME with frm files in a new mysql database.
2-stop mysql service
3- copy and paste the old frm files to newly created table's frm files, it should ask you if you want to overwrite or not for each. replace all.
4-start mysql service, and you have your table structure...
regards.
anybudy
I answered this question here, as well: https://dba.stackexchange.com/a/42932/24122
I recently experienced this same issue. I'm on a Mac and so I used MAMP in order to restore the Database to a point where I could export it in a MySQL dump.
You can read the full blog post about it here: http://www.quora.com/Jordan-Ryan/Web-Dev/How-to-Recover-innoDB-MySQL-files-using-MAMP-on-a-Mac
You must have:
-ibdata1
-ib_logfile0
-ib_logfile1
-.FRM files from your mysql_database folder
-Fresh installation of MAMP / MAMP Pro that you are willing to destroy (if need be)
SSH into your web server (dev, production, no difference) and browse to your mysql folder (mine was at /var/lib/mysql for a Plesk installation on Linux)
Compress the mysql folder
Download an archive of mysql folder which should contain all mySQL databases, whether MyISAM or innoDB (you can scp this file, or move this to a downloadable directory, if need be)
Install MAMP (Mac, Apache, MySQL, PHP)
Browse to /Applications/MAMP/db/mysql/
Backup /Applications/MAMP/db/mysql to a zip archive (just in case)
Copy in all folders and files included in the archive of the mysql folder from the production server (mt Plesk environment in my case) EXCEPT DO NOT OVERWRITE:
-/Applications/MAMP/db/mysql/mysql/
-/Applications/MAMP/db/mysql/mysql_upgrade_info
-/Applications/MAMP/db/mysql/performance_schema
And voila, you now should be able to access the databases from phpMyAdmin, what a relief!
But we're not done, you now need to perform a mysqldump in order to restore these files to your production environment, and the phpmyadmin interface times out for large databases.
Follow the steps here:
http://nickhardeman.com/308/export-import-large-database-using-mamp-with-terminal/
Copied below for reference. Note that on a default MAMP installation, the password is "root".
How to run mysqldump for MAMP using Terminal
EXPORT DATABASE FROM MAMP[1]
Step One:
Open a new terminal window
Step Two:
Navigate to the MAMP install by entering the following line in terminal
cd /applications/MAMP/library/bin
Hit the enter key
Step Three:
Write the dump command
./mysqldump -u [USERNAME] -p [DATA_BASENAME] > [PATH_TO_FILE]
Hit the enter key
Example:
./mysqldump -u root -p wp_database > /Applications/MAMP/htdocs/symposium10_wp/wp_db_onezero.sql
Quick tip: to navigate to a folder quickly you can drag the folder into the terminal window and it will write the location of the folder. It was a great day when someone showed me this.
Step Four:
This line of text should appear after you hit enter
Enter password:
So guess what, type your password, keep in mind that the letters will not appear, but they are there
Hit the enter key
Step Five:
Check the location of where you stored your file, if it is there, SUCCESS
Now you can import the database, which will be outlined next.
Now that you have an export of your mysql database you can import it on the production environment.
I made use of mysqlfrm which is a great tool which generates table creation sql code from .frm files. I was getting this nasty table not found error although tables were being listed. Thus I used this tool to regenerate the tables. In ubuntu you need to install this as:
sudo apt install mysql-utilities
then,
mysqlfrm --diagnostic mysql/db_name/ > db_name.sql
Create a new database and then you can use,
mysql -u username -p < db_name.sql
However, this will give you the tables but not the data. In my case this was enough.
Yes! It is possible
Long approach but you can get all the data's using just .frm files. Of course, you need other files in the mysql/data directory.
My Problem
One day my hard disk crashed and got the booting blue screen error. I try connecting with multiple machines and it didn't work. Since it is a booting error I was concerned about the files. and I tried with the secondary hard disk and try to recover the folders and files. I also backed up the full xampp folder c:/xampp just in case, Because I had no back of the recent databases I got really worried about how to retrieve the database. we have a lot of clients' project management and personal doc in the database.
None of the methods listed on the StackOverflow comment works, at least for me. It took me 2 full days googling for the answer to getting the data from the .frm files. Came across multiple approaches from many people but everything was frustrating and getting some error or another when implementing. If most of them get it working (based on their comment) then what am I missing.
Because I was so desperate I even reinstall windows which result in losing all my software and tried again. But still the same error
THANKS to Dustin Davis
I found the solution in his blog and I managed to get it working exactly the same way he did. Let me give the credit to this guy, Dustin Davis (https://dustindavis.me/restoring-mysql-innodb-files-on-windows/). You could jump from here to his blog and try his method, pretty clear and easy to follow.
But there is something I discovered when trying his approach that he hasn't explained in his blog and I will try my best to explain how I did and what you need to look for.
Follow this exactly
IMPORTANT: Make sure you install the same version of XAMPP. You cannot copy-paste from older XAMPP to a new version. This will result in __config or __tracking errors.
How to check your XAMPP version
Go to your xampp folder (you're backed up xampp).
Open the readme_en.txt file. which is in the root directory of the xampp.
You should see the version on top. ###### ApacheFriends XAMPP Version X.X.XX ######
Files require to restore
xampp(old folder)/mysql/data/
ibdata1
ib_logfile0
ib_logfile1
<databasename>/*.frm
<databasename>/*.ibd
Step 1
After installing the same version of xampp.
Do not start the apache or myql
Step 2
Go to the mysql/data folder and replace the ibdata1, ib_logfile0, and ib_logfile1
Now copy paste your database folder from your old xampp backup to the newly installed xampp folder c:/xampp/mysql/data/ that contain .frm and .ibd files, If you are not sure try with one database.
Step 3
Go to c:/xampp/mysql/bin and look for my.cn.
Open the my.cn file and look for #skip-innodb and under that look for the line that says innodb_log_file_size=5M change it to 170M. innodb_log_file_size=170M. This is your log file size and if you are not sure just set it to 170
Step 4
Now open the file mysql_start.bat (Windows Batch file) that is in the c:/xampp/ directory.
Add –innodb_force_recovery=6 after the ... --console
....
mysql\bin\mysqld --defaults-file=mysql\bin\my.ini --standalone --console -–innodb_force_recovery=6
if errorlevel 1 goto error
goto finish
Step 5
Now Start your Apache and Mysql.
Go to your PHPMyAdmin and check for your database and its tables. if you do not get any errors you are on the right track.
Stop the Apache and Mysql and copy-paste the rest of the databases.
I just copy pasted the database folders to data folder in MySQL, i.e. If you have a database called alto then find the folder alto in your MySQL -> Data folder in your backup and copy the entire alto folder and past it to newly installed MySQL -> data folder, restart the MySQL and this works perfect.
Copy all file and replace to /var/lib/mysql ,
after that you must change owner of files to mysql
this is so important if mariadb.service restart has been faild
chown -R mysql:mysql /var/lib/mysql/*
and
chmod -R 700 /var/lib/mysql/*
After much trial and error I was able to get this working based on user359187 answer and this blog post.
To get my old .frm and .ibd transferred to a new MySQL database after copying the files over and assigning MySQL ownership, the key for me was to then log into MySQL and connect to the new database then let MySQL do the work by importing the tablespace.
mysql> connect test;
mysql> ALTER TABLE t1 IMPORT TABLESPACE;
This will import the data using the copied .frm and .ibd files.
I had to run the Alter command for each table separately but this worked and I was able to recover the tables and data.
Before starting you should stop the WAMP services, or at least restart the services when prompted to start them.
On the old server instance navigate to the MySQL data folder by default this should look something similar to C:\wamp\bin\mysql\mysql5.1.53\data\ where mysql5.1.53 will be the version number of the previously installed MySQL database.
Inside this folder you should see a few files and folders. The folders are the actual MySQL databases, and contain a bunch of .frm files which we will require. You should recognise the folder names as the database names. These folder and all their contents can be copied directly to your MySQL data folder, you can neglect the default databases mysql, performance_schema, test.
If you started the server now you will see the databases are picked up, however the databases will contain none of the tables which were copied across. In order for the contents of the database to be picked up, back in the data folder you should see a file ibdata1, this is the data file for tables, copy this directly into the data folder, you should already have a file in your new data folder called “ibdata1″ so you may wish to rename this to ibdata1.bak before copying across the ibdata1 from the old MySQL data folder.
Once this has been done Restart all the WAMP services. You can use PhpMyAdmin to check if your databases have been successfully restored.
create a new database with same name
copy the .frm .ibd files into xampp/mysql/data/[databasename]/
you will need ibdata file as well
which is found inside
xampp/mysql/data/
copy the previous ibdata1 file
paste in the paste the file and replace it with the existing ibdata file
[caution: you may loose the contents of the database which are newly created in the new ibdata file]