mirror of
https://github.com/ChuckPa/PlexDBRepair.git
synced 2025-11-06 03:08:55 -05:00
.
This commit is contained in:
parent
b621ca1ab1
commit
d4005fba15
148
DBRepair-WinDev.bat
Normal file
148
DBRepair-WinDev.bat
Normal file
@ -0,0 +1,148 @@
|
|||||||
|
@echo off
|
||||||
|
REM PlexDBRepair.bat - Database maintenance / rebuild tool for Windows.
|
||||||
|
REM
|
||||||
|
REM This tool currently works as a "full shot" service.
|
||||||
|
REM - everything is done without need to interact.
|
||||||
|
REM
|
||||||
|
REM -- WARNNING -- WARNING -- WARNING
|
||||||
|
REM
|
||||||
|
REM 1. This is stable working software but not "Released" software. Development will continue.
|
||||||
|
REM 2. You must ensure variable PlexData points to your databases. (there is no automatic detection at this time)
|
||||||
|
REM
|
||||||
|
REM System format controls ^Roll_eyes^
|
||||||
|
set TimeStamp=%date:~10,4%-%date:~+4,2%-%date:~+7,2%_%time:~0,2%.%time:~3,2%.%time:~6,2%
|
||||||
|
|
||||||
|
REM These assume PMS is in the default location
|
||||||
|
set "PlexData=%LOCALAPPDATA%\Plex Media Server\Plug-in Support\Databases"
|
||||||
|
set "PlexSQL=%PROGRAMFILES%\Plex\Plex Media Server\Plex SQLite"
|
||||||
|
set "DBtmp=%PlexData%\dbtmp"
|
||||||
|
set "TmpFile=%DBtmp%\results.tmp"
|
||||||
|
|
||||||
|
|
||||||
|
REM Time now.
|
||||||
|
echo %time% -- ====== Session begins. (%date%) ======
|
||||||
|
echo %time% -- ====== Session begins. (%date%) ====== >> "%PlexData%\PlexDBRepair.log"
|
||||||
|
|
||||||
|
REM Make certain Plex is NOT running.
|
||||||
|
tasklist | find /I "Plex Media Server.exe" >NUL
|
||||||
|
if %ERRORLEVEL%==0 (
|
||||||
|
echo %time% -- Plex is running. Please stop Plex Media Server and try again.
|
||||||
|
echo %time% -- Plex is running. Please stop Plex Media Server and try again. >> "%PlexData%\PlexDBRepair.log"
|
||||||
|
exit /B 1
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
cd "%PlexData%"
|
||||||
|
|
||||||
|
mkdir "%PlexData%\dbtmp" 2>NUL
|
||||||
|
del "%TmpFile%" 2>NUL
|
||||||
|
|
||||||
|
echo %time% -- Exporting Main DB
|
||||||
|
echo %time% -- Exporting Main DB >> "%PlexData%\PlexDBRepair.log"
|
||||||
|
echo .dump | "%PlexSQL%" "%PlexData%\com.plexapp.plugins.library.db" > "%DBtmp%\library.sql_%TimeStamp%"
|
||||||
|
if not %ERRORLEVEL%==0 (
|
||||||
|
echo %time% -- ERROR: Cannot export Main DB. Aborting.
|
||||||
|
exit /b 2
|
||||||
|
)
|
||||||
|
|
||||||
|
echo %time% -- Exporting Blobs DB
|
||||||
|
echo %time% -- Exporting Blobs DB >> "%PlexData%\PlexDBRepair.log"
|
||||||
|
echo .dump | "%PlexSQL%" "%PlexData%\com.plexapp.plugins.library.blobs.db" > "%DBtmp%\blobs.sql_%TimeStamp%"
|
||||||
|
if not %ERRORLEVEL%==0 (
|
||||||
|
echo %time% -- ERROR: Cannot export Blobs DB. Aborting.
|
||||||
|
)
|
||||||
|
|
||||||
|
REM Now create new databases from SQL statements
|
||||||
|
echo %time% -- Exporting Complete.
|
||||||
|
echo %time% -- Exporting Complete. >> "%PlexData%\PlexDBRepair.log"
|
||||||
|
|
||||||
|
echo %time% -- Creating Main DB
|
||||||
|
echo %time% -- Creating Main DB >> "%PlexData%\PlexDBRepair.log"
|
||||||
|
"%PlexSQL%" "%PlexData%\com.plexapp.plugins.library.db_%TimeStamp%" < "%DBtmp%\library.sql_%TimeStamp%"
|
||||||
|
if not %ERRORLEVEL%==0 (
|
||||||
|
echo %time% -- ERROR: Cannot create Main DB. Aborting.
|
||||||
|
echo %time% -- ERROR: Cannot create Main DB. Aborting. >> "%PlexData%\PlexDBRepair.log"
|
||||||
|
exit /b 3
|
||||||
|
)
|
||||||
|
|
||||||
|
echo %time% -- Verifying Main DB
|
||||||
|
echo %time% -- Verifying Main DB >> "%PlexData%\PlexDBRepair.log"
|
||||||
|
"%PlexSQL%" "%PlexData%\com.plexapp.plugins.library.db_%TimeStamp%" "PRAGMA integrity_check(1)" >"%TmpFile%"
|
||||||
|
set /p Result= < "%TmpFile%"
|
||||||
|
del "%TmpFile%"
|
||||||
|
|
||||||
|
echo %time% -- Main DB verification check is: %Result%
|
||||||
|
echo %time% -- Main DB verification check is: %Result% >> "%PlexData%\PlexDBRepair.log"
|
||||||
|
if not "%Result%" == "ok" (
|
||||||
|
echo %time% -- ERROR: Main DB verificaion failed. Exiting.
|
||||||
|
echo %time% -- ERROR: Main DB verificaion failed. Exiting. >> "%PlexData%\PlexDBRepair.log"
|
||||||
|
exit /B 4
|
||||||
|
)
|
||||||
|
echo %time% -- Main DB verification successful.
|
||||||
|
echo %time% -- Main DB verification successful. >> "%PlexData%\PlexDBRepair.log"
|
||||||
|
|
||||||
|
|
||||||
|
echo %time% -- Creating Blobs DB
|
||||||
|
echo %time% -- Creating Blobs DB >> "%PlexData%\PlexDBRepair.log"
|
||||||
|
"%PlexSQL%" "%PlexData%\com.plexapp.plugins.library.blobs.db_%TimeStamp%" < "%DBtmp%\blobs.sql_%TimeStamp%"
|
||||||
|
if not %ERRORLEVEL%==0 (
|
||||||
|
echo %time% -- ERROR: Cannot create Blobs DB. Aborting.
|
||||||
|
echo %time% -- ERROR: Cannot create Blobs DB. Aborting. >> "%PlexData%\PlexDBRepair.log"
|
||||||
|
exit /b 5
|
||||||
|
)
|
||||||
|
|
||||||
|
echo %time% -- Verifying Blobs DB
|
||||||
|
echo %time% -- Verifying Blobs DB >> "%PlexData%\PlexDBRepair.log"
|
||||||
|
"%PlexSQL%" "%PlexData%\com.plexapp.plugins.library.blobs.db_%TimeStamp%" "PRAGMA integrity_check(1)" > "%TmpFile%"
|
||||||
|
set /p Result= < "%TmpFile%"
|
||||||
|
del "%TmpFile%"
|
||||||
|
|
||||||
|
echo %time% -- Blobs DB verification check is: %Result%
|
||||||
|
echo %time% -- Blobs DB verification check is: %Result% >> "%PlexData%\PlexDBRepair.log"
|
||||||
|
if not "%Result%" == "ok" (
|
||||||
|
echo %time% -- ERROR: Blobs DB verificaion failed. Exiting.
|
||||||
|
echo %time% -- ERROR: Blobs DB verificaion failed. Exiting. >> "%PlexData%\PlexDBRepair.log"
|
||||||
|
exit /B 6
|
||||||
|
)
|
||||||
|
echo %time% -- Blobs DB verification successful.
|
||||||
|
echo %time% -- Blobs DB verification successful. >> "%PlexData%\PlexDBRepair.log"
|
||||||
|
echo %time% -- Import and verification complete.
|
||||||
|
echo %time% -- Import and verification complete. >> "%PlexData%\PlexDBRepair.log"
|
||||||
|
|
||||||
|
REM Import complete, now reindex
|
||||||
|
echo %time% -- Reindexing Main DB
|
||||||
|
echo %time% -- Reindexing Main DB >> "%PlexData%\PlexDBRepair.log"
|
||||||
|
"%PlexSQL%" "%PlexData%\com.plexapp.plugins.library.db_%TimeStamp%" "REINDEX;"
|
||||||
|
|
||||||
|
echo %time% -- Reindexing Blobs DB
|
||||||
|
echo %time% -- Reindexing Blobs DB >> "%PlexData%\PlexDBRepair.log"
|
||||||
|
"%PlexSQL%" "%PlexData%\com.plexapp.plugins.library.blobs.db_%TimeStamp%" "REINDEX;"
|
||||||
|
|
||||||
|
REM Index complete, make active
|
||||||
|
echo %time% -- Reindexing complete.
|
||||||
|
echo %time% -- Reindexing complete. >> "%PlexData%\PlexDBRepair.log"
|
||||||
|
echo %time% -- Moving current DBs to DBTMP and making new databases active
|
||||||
|
echo %time% -- Moving current DBs to DBTMP and making new databases active >> "%PlexData%\PlexDBRepair.log"
|
||||||
|
|
||||||
|
move "%PlexData%\com.plexapp.plugins.library.db" "%PlexData%\dbtmp\com.plexapp.plugins.library.db_%TimeStamp%"
|
||||||
|
move "%PlexData%\com.plexapp.plugins.library.db_%TimeStamp%" "%PlexData%\com.plexapp.plugins.library.db"
|
||||||
|
|
||||||
|
move "%PlexData%\com.plexapp.plugins.library.blobs.db" "%PlexData%\dbtmp\com.plexapp.plugins.library.blobs.db_%TimeStamp%"
|
||||||
|
move "%PlexData%\com.plexapp.plugins.library.blobs.db_%TimeStamp%" "%PlexData%\com.plexapp.plugins.library.blobs.db"
|
||||||
|
|
||||||
|
echo %time% -- Database repair/rebuild/reindex completed.
|
||||||
|
echo %time% -- Database repair/rebuild/reindex completed. >> "%PlexData%\PlexDBRepair.log"
|
||||||
|
echo %time% -- ====== Session completed. ======
|
||||||
|
echo %time% -- ====== Session completed. ====== >> "%PlexData%\PlexDBRepair.log"
|
||||||
|
|
||||||
|
exit /b
|
||||||
|
|
||||||
|
|
||||||
|
REM #### Functions
|
||||||
|
|
||||||
|
REM Output - Write text to the console and the log file
|
||||||
|
:Output
|
||||||
|
|
||||||
|
echo %time% %~1
|
||||||
|
echo %time% %~1 >> "%PlexData%\PlexDBRepair.log"
|
||||||
|
exit /B
|
||||||
BIN
DBRepair-Windows.zip
Normal file
BIN
DBRepair-Windows.zip
Normal file
Binary file not shown.
44
DBRepair.sh
44
DBRepair.sh
@ -396,35 +396,31 @@ HostConfig() {
|
|||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|
||||||
# Docker
|
# Docker (All main docker variants except binhex)
|
||||||
elif [ "$(grep docker /proc/1/cgroup | wc -l)" -gt 0 ] || [ "$(grep 0::/ /proc/1/cgroup)" = "0::/" ]; then
|
elif [ "$(grep docker /proc/1/cgroup | wc -l)" -gt 0 ] && [ -d "/config/Library/Application Support" ]; then
|
||||||
|
|
||||||
# Docker (All main docker variants except binhex)
|
PLEX_SQLITE="/usr/lib/plexmediaserver/Plex SQLite"
|
||||||
if [ -d "/config/Library/Application Support" ]; then
|
AppSuppDir="/config/Library/Application Support"
|
||||||
|
PID_FILE="$AppSuppDir/Plex Media Server/plexmediaserver.pid"
|
||||||
|
DBDIR="$AppSuppDir/Plex Media Server/Plug-in Support/Databases"
|
||||||
|
LOGFILE="$DBDIR/DBRepair.log"
|
||||||
|
LOG_TOOL="logger"
|
||||||
|
|
||||||
PLEX_SQLITE="/usr/lib/plexmediaserver/Plex SQLite"
|
HostType="Docker"
|
||||||
AppSuppDir="/config/Library/Application Support"
|
return 0
|
||||||
PID_FILE="$AppSuppDir/Plex Media Server/plexmediaserver.pid"
|
|
||||||
DBDIR="$AppSuppDir/Plex Media Server/Plug-in Support/Databases"
|
|
||||||
LOGFILE="$DBDIR/DBRepair.log"
|
|
||||||
LOG_TOOL="logger"
|
|
||||||
|
|
||||||
HostType="Docker"
|
# BINHEX Plex container
|
||||||
return 0
|
elif [ "$(grep docker /proc/1/cgroup | wc -l)" -gt 0 ] && [ -d "/config/Plex Media Server" ]; then
|
||||||
|
|
||||||
# BINHEX Plex container
|
PLEX_SQLITE="/usr/lib/plexmediaserver/Plex SQLite"
|
||||||
elif [ -d "/config/Plex Media Server" ]; then
|
AppSuppDir="/config"
|
||||||
|
PID_FILE="$AppSuppDir/Plex Media Server/plexmediaserver.pid"
|
||||||
|
DBDIR="$AppSuppDir/Plex Media Server/Plug-in Support/Databases"
|
||||||
|
LOGFILE="$DBDIR/DBRepair.log"
|
||||||
|
LOG_TOOL="logger"
|
||||||
|
|
||||||
PLEX_SQLITE="/usr/lib/plexmediaserver/Plex SQLite"
|
HostType="BINHEX"
|
||||||
AppSuppDir="/config"
|
return 0
|
||||||
PID_FILE="$AppSuppDir/Plex Media Server/plexmediaserver.pid"
|
|
||||||
DBDIR="$AppSuppDir/Plex Media Server/Plug-in Support/Databases"
|
|
||||||
LOGFILE="$DBDIR/DBRepair.log"
|
|
||||||
LOG_TOOL="logger"
|
|
||||||
|
|
||||||
HostType="BINHEX"
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Western Digital (OS5)
|
# Western Digital (OS5)
|
||||||
elif [ -f /etc/system.conf ] && [ -d /mnt/HD/HD_a2/Nas_Prog/plexmediaserver ] && \
|
elif [ -f /etc/system.conf ] && [ -d /mnt/HD/HD_a2/Nas_Prog/plexmediaserver ] && \
|
||||||
|
|||||||
34
README.md
34
README.md
@ -7,7 +7,7 @@
|
|||||||
[]('')
|
[]('')
|
||||||

|

|
||||||
|
|
||||||
# Introduction
|
## Introduction
|
||||||
|
|
||||||
DBRepair provides database repair and maintenance for the most common Plex Media Server database problems.
|
DBRepair provides database repair and maintenance for the most common Plex Media Server database problems.
|
||||||
It is a simple menu-driven utility with a command line backend.
|
It is a simple menu-driven utility with a command line backend.
|
||||||
@ -62,18 +62,23 @@ It is a simple menu-driven utility with a command line backend.
|
|||||||
|
|
||||||
|
|
||||||
```
|
```
|
||||||
### To install & launch on general Linux or most Linux NAS platforms:
|
### To install & launch on general Linux or most Linux NAS platforms: (Showing with v0.6.1)
|
||||||
1. Place the tar/zip/sh file in the appropriate directory
|
1. Open your browser to https://github.com/ChuckPa/PlexDBRepair/releases/latest
|
||||||
2. Open a command line session (usually SSH)
|
2. Download the source code (tar.gz) file
|
||||||
3. Elevate privilege level to root
|
3. Place the tar.gz file in the appropriate directory on the system you'll use it.
|
||||||
4. Extract the utility from the tar or zip file
|
4. Open a command line session (usually Terminal or SSH)
|
||||||
4. Invoke the utility
|
5. Elevate privilege level to root (sudo)
|
||||||
|
6. Extract the utility from the tar or zip file
|
||||||
|
7. 'cd' into the extraction directory
|
||||||
|
8. Give the utility 'execute' permission
|
||||||
|
9. Invoke the utility
|
||||||
|
|
||||||
#### (Synology DSM 6 used as example)
|
#### (Synology DSM 6 and version v0.6.1 used as example)
|
||||||
```
|
```
|
||||||
cd /volume1/Plex
|
cd /volume1/Plex
|
||||||
sudo bash
|
sudo bash
|
||||||
tar xf DBRepair.tar.gz
|
tar xf PlexDBRepair-0.6.1.tar.gz
|
||||||
|
cd PlexDBRepair-0.6.1
|
||||||
chmod +x DBRepair.sh
|
chmod +x DBRepair.sh
|
||||||
./DBRepair.sh
|
./DBRepair.sh
|
||||||
```
|
```
|
||||||
@ -93,7 +98,8 @@ It is a simple menu-driven utility with a command line backend.
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
tar xf DBRepair.tar.gz
|
tar xf PlexDBRepair-0.6.1.tar.gz
|
||||||
|
cd PlexDBRepair-0.6.1
|
||||||
chmod +x DBRepair.sh
|
chmod +x DBRepair.sh
|
||||||
./DBRepair.sh
|
./DBRepair.sh
|
||||||
```
|
```
|
||||||
@ -102,7 +108,9 @@ It is a simple menu-driven utility with a command line backend.
|
|||||||
sudo bash
|
sudo bash
|
||||||
systemctl stop plexmediaserver
|
systemctl stop plexmediaserver
|
||||||
cd /path/to/DBRepair.tar
|
cd /path/to/DBRepair.tar
|
||||||
tar xf DBRepair.tar.gz
|
tar xf PlexDBRepair-0.6.1.tar.gz
|
||||||
|
cd PlexDBRepair-0.6.1
|
||||||
|
chmod +x DBRepair.sh
|
||||||
./DBRepair.sh
|
./DBRepair.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -110,8 +118,8 @@ It is a simple menu-driven utility with a command line backend.
|
|||||||
```
|
```
|
||||||
osascript -e 'quit app "Plex Media Server"'
|
osascript -e 'quit app "Plex Media Server"'
|
||||||
cd ~/Downloads
|
cd ~/Downloads
|
||||||
tar xvf PlexDBRepair-0.3.4.tar.gz
|
tar xvf PlexDBRepai PlexDBRepair-0.6.1.tar.gz
|
||||||
cd PlexDBRepair-0.3.4
|
cd PlexDBRepai PlexDBRepair-0.6.1
|
||||||
chmod +x DBRepair.sh
|
chmod +x DBRepair.sh
|
||||||
./DBRepair.sh
|
./DBRepair.sh
|
||||||
```
|
```
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user