109 lines
4.6 KiB
Markdown
109 lines
4.6 KiB
Markdown
Updating Friendica
|
|
===============
|
|
|
|
* [Home](help)
|
|
|
|
## Using a Friendica archive
|
|
|
|
If you installed Friendica in the ``path/to/friendica`` folder:
|
|
|
|
1. Unpack the new Friendica archive in ``path/to/friendica_new``.
|
|
2. Copy the following items from ``path/to/friendica`` to ``path/to/friendica_new``:
|
|
* ``config/local.config.php``
|
|
* ``proxy/``
|
|
The following items only need to be copied if they are located inside your friendica path:
|
|
* your storage folder as set in **Admin -> Site -> File Upload -> Storage base path**
|
|
* your item cache as set in **Admin -> Site -> Performance -> Path to item cache**
|
|
* your temp folder as set in **Admin -> Site -> Advanced -> Temp path**
|
|
3. Rename the ``path/to/friendica`` folder to ``path/to/friendica_old``.
|
|
4. Rename the ``path/to/friendica_new`` folder to ``path/to/friendica``.
|
|
5. Check your site. Note: it may go into maintenance mode to update the database schema.
|
|
6. If everything works, just delete the ``path/to/friendica_old`` folder.
|
|
|
|
To update Addons from an archive, simply delete the ``path/to/friendica/addon`` and replace it with the provided archive.
|
|
|
|
## Using Git
|
|
|
|
You can get the latest changes at any time with
|
|
|
|
cd path/to/friendica
|
|
git pull
|
|
bin/composer.phar install --no-dev
|
|
|
|
The addon tree has to be updated separately like so:
|
|
|
|
cd path/to/friendica/addon
|
|
git pull
|
|
|
|
For both repositories:
|
|
The default branch to use is the ``stable`` branch, which is the stable version of Friendica.
|
|
It is updated about four times a year on a fixed schedule.
|
|
|
|
If you want to use and test bleeding edge code please checkout the ``develop`` branch.
|
|
The new features and fixes will be merged from ``develop`` into ``stable`` after a release candidate period before each release.
|
|
|
|
Warning: The ``develop`` branch is unstable, and breaks on average once a month for at most 24 hours until a patch is submitted and merged.
|
|
Be sure to pull frequently if you choose the ``develop`` branch.
|
|
|
|
### Considerations before upgrading Friendica
|
|
|
|
#### MySQL >= 5.7.4
|
|
|
|
Starting from MySQL version 5.7.4, the IGNORE keyword in ALTER TABLE statements is ignored.
|
|
This prevents automatic table deduplication if a UNIQUE index is added to a Friendica table's structure.
|
|
If a DB update fails for you while creating a UNIQUE index, make sure to manually deduplicate the table before trying the update again.
|
|
|
|
#### Manual deduplication
|
|
|
|
There are two main ways of doing it, either by manually removing the duplicates or by recreating the table.
|
|
Manually removing the duplicates is usually faster if they're not too numerous.
|
|
To manually remove the duplicates, you need to know the UNIQUE index columns available in `database.sql`.
|
|
|
|
```SQL
|
|
SELECT GROUP_CONCAT(id), <index columns>, count(*) as count FROM users
|
|
GROUP BY <index columns> HAVING count >= 2;
|
|
|
|
/* delete or merge duplicate from above query */;
|
|
```
|
|
|
|
If there are too many rows to handle manually, you can create a new table with the same structure as the table with duplicates and insert the existing content with INSERT IGNORE.
|
|
To recreate the table you need to know the table structure available in `database.sql`.
|
|
|
|
```SQL
|
|
CREATE TABLE <table_name>_new <rest of the CREATE TABLE>;
|
|
INSERT IGNORE INTO <table_name>_new SELECT * FROM <table_name>;
|
|
DROP TABLE <table_name>;
|
|
RENAME TABLE <table_name>_new TO <table_name>;
|
|
```
|
|
|
|
This method is slower overall, but it is better suited for large numbers of duplicates.
|
|
|
|
### Resolving Possible Database Issues Post Upgrading
|
|
|
|
#### Foriegn Keys
|
|
|
|
Some of the updates include the use of foreign keys now that will bump
|
|
into issues with previous versions, which would sometimes shove bad
|
|
data into tables, preventing, causing errors such as below.
|
|
|
|
```
|
|
Error 1452 occurred during database update:
|
|
Cannot add or update a child row: a foreign key constraint fails (`friendica`.`#sql-10ea6_5a6d`, CONSTRAINT `#sql-10ea6_5a6d_ibfk_1` FOREIGN KEY (`contact-id`) REFERENCES `contact` (`id`))
|
|
ALTER TABLE `thread` ADD FOREIGN KEY (`iid`) REFERENCES `item` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE;
|
|
```
|
|
|
|
All current known fixes for possible items that can go wrong are as below.
|
|
|
|
```SQL
|
|
delete from item where `owner-id` not in (select id from contact);
|
|
delete from item where `contact-id` not in (select id from contact);
|
|
delete from notify where `uri-id` not in (select id from `item-uri`);
|
|
delete from photo where `contact-id` not in (select id from contact);
|
|
delete from thread where iid not in (select id from item);
|
|
delete from item where `author-id` not in (select id from contact);
|
|
delete from diaspora-interaction where uri-id not in (select id from item-uri);
|
|
```
|
|
|
|
This all has been compiled as of currently from issue #9746, #9753,
|
|
and #9878.
|