How to Sync Your Kodi Library Across Multiple Devices with MySQL

Kodi is still one of the most powerful media center applications around, and it works on everything from powerful media PCs to small Raspberry Pis. But if you have multiple TVs in your house, wouldn’t it be nice if they all stayed in sync?

By default, if you have multiple Kodi machines, they won’t recognize each other. Episodes you watched on one TV won’t show as “watched” on another. Wouldn’t it be nice, though, if your bedroom Kodi box knew what you watched in the living room, and vice-versa? Would it be nice if you could stop watching a movie in the living room, and resume watching right where you left off somewhere else in the house?

Well, it’s possible—it just takes a bit of setup. Here’s how to do it.

What You’ll Need

The core of the synchronization magic we’re about to undertake is a MySQL database. Don’t panic if you’ve never used one before! It does require a little technical know-how, but we’re here to guide you every step of the way. If you follow along closely, you shouldn’t have any problems.

What we’re going to do is install a free version of MySQL server, then instruct all your Kodi machines to use a database on that server as its library (instead of a separate database on each individual computer). From that point forward, when Kodi checks to see if you’ve seen a specific TV show episode or movie, paused media, or set a bookmark, it won’t just be answering for the specific media center you’re standing in front of, but for all media centers in the house.

For this project, you’ll need the following:

  • More than one media center with Kodi installed (they’ll all need to be the same base version of Kodi—we’ll be using v17 “Krypton” in this guide).
  • A free copy of MySQL Community Server—the Kodi wiki recommends grabbing version 5.5 instead of the newer 5.7, so that’s what we’ll be using for this tutorial.
  • An always-on or nearly-always-on computer to run the MySQL server on.

You can install the MySQL server on any computer that will be consistently on while you’re using the media centers. In our case, we’re going to install MySQL on the same always-on home server that we store our movies and TV shows on—that way, any time the media is available to Kodi, so is the database.

Step One: Install the MySQL Server

For this tutorial, we’ll be installing MySQL on a media server running Windows 10. Our installation instructions should match for any version of Windows. For other operating systems, please consult the MySQL 5.5 Manual.

The installation of MySQL is straightforward. Simply download the server installation app and run it. Accept the license agreement and the “Typical” installation. When it’s finished, make sure “Launch the MySQL Instance Configuration Wizard” is checked, and click Finish.

The MySQL configuration wizard will launch and present you with the option to select between Detailed and Standard Configuration. Select Standard Configuration and click Next.

On the next screen, check “Install As Windows Service”, name it MySQL—or, if you’re running multiple MySQL servers for some purpose, give it a unique name—and check “Launch the MySQL Server Automatically” to ensure the MySQL server is always on when you need it.

On the next screen, check Modify Security Settings, plug in a new root password, and check Enable root access from remote machines.

Click through to the final screen and press Execute to let the wizard set everything up with the parameters you’ve specified. When it’s finished, move on to Step Two.

Step Two: Set Up Your MySQL User

Next, it’s time to create a user account on the MySQL server for your media centers. We’ll need a bit of command line work for this. To start, run the MySQL Command Line Client—you should have an entry for it in your Start Menu.

When the console opens, enter the password you created in the previous step. You’ll then find yourself at the MySQL server prompt.

At the prompt, type the following commands, pressing Enter after each one, to create a user on the database server:

CREATE USER 'kodi' IDENTIFIED BY 'kodi';
GRANT ALL ON *.* TO 'kodi';
flush privileges;

The first portion of the first command creates the user, the second portion creates the password. While identical login/passwords are generally a huge security no-no in this case we’re comfortable using a matching pair for the sake of simplicity. A MySQL database, on a private server, that tracks which episodes of Dexter you’ve watched is hardly a high risk installation.

That’s all you need to do in the command line for now—though we recommend keep the command prompt open for the MySQL server, however, as we’re going to check in later and take a peek at the databases once Kodi has created them for us.

We have one final task before going to configure Kodi. Make sure that Port 3306 (the MySQL server port) is open on the firewall of the machine you’ve installed MySQL onto. By default, the Windows installer should open the port automatically, but we’ve seen situations in which it didn’t. The easiest way to open the port is with a PowerShell command. Search for PowerShell in your Start menu, then right-click on it and choose “Run as Administrator”.

Then, run the following command and press Enter:

New-NetFirewallRule -DisplayName "Allow inbound TCP Port 3306 for MySQL" -Direction inbound –LocalPort 3306 -Protocol TCP -Action Allow

If the command was successful, as shown below, you should be good to continue.

Step Three: Back Up Your Current Kodi Library (Optional)

By default, Kodi uses an internal SQLite database. In order for Kodi to communicate effectively across your home network, we need to instruct it to use an external MySQL database. Before we get to that step, however, you’ll need to make an executive decision: you can either back up your current library and restore it later (which can sometimes be finicky), or you can start fresh with a new library (which is easy but will require you to re-set the watched state on your shows, and possibly re-choose your artwork if you don’t store it locally).

If you want to back up your current library, you can do so from within Kodi. Only do this from one machine—choose the machine with the most up to date libraries. Open Kodi and head to Settings > Media Settings > Export Library. (If you don’t see these options, make sure your menus are set to “Advanced” or “Expert” in Kodi.)

You can export your library as a single file or as separate files. A single file will allow you to put your backup in one place, while multiple files will scatter extra JPG and NFO files into your media folders—this is more reliable, but quite cluttered. Choose whichever option you want.

Once your library is backed up, continue to the next step.

Step Four: Configure Kodi to Use Your New MySQL Server

Once you’ve backed up the library (or opted to not worry about it and start from scratch), you’re ready to point Kodi to your MySQL server. You’ll need to perform this step on every machine running Kodi, but we recommend setting it up on one machine first—probably the same machine you backed up your library from, if you chose to do so.

In order to point Kodi to MySQL, we need to edit Kodi’s advancedsettings.xml file. By default this file does not exist (although it is possible that, during the installation process, Kodi created one for you to deal with specific configuration issues). If the advancedsettings.xml file exists, it will be in the following location, based on your OS:

  • Windows: C:\Users\[username]\AppData\Roaming\Kodi\userdata
  • Linux and other Live versions of Kodi: $HOME/.kodi/userdata
  • macOS: /Users/[username]/Library/Application Support/Kodi/userdata

Check in that folder. Is there an advancedsettings.xml file there? Yes? Open it up. No? You’ll need to open a text editor and create one. Regardless of whether you’re editing the existing one or create a new one, cut and paste the following text into the file (note: if there are already some entries in your advancedsettings.xml file, leave those in place and put these values within the correct sections):

<advancedsettings>
<videodatabase>
<type>mysql</type>
<host>192.168.1.10</host>
<port>3306</port>
<user>kodi</user>
<pass>kodi</pass>
</videodatabase>

<musicdatabase>
<type>mysql</type>
<host>192.168.1.10</host>
<port>3306</port>
<user>kodi</user>
<pass>kodi</pass>
</musicdatabase>
</advancedsettings>

Edit the above text to reflect the IP address of your server on your LAN and the username/password of your MySQL database (in our example, it was just kodi/kodi). This basic setup should get your video and music libraries synced, but you can also sync other portions of Kodi, as well as sync multiple profiles with the name tag if you use them.

Once your advancedsettings.xml file is ready to go, open Kodi on that machine. You’ll need to either import your library (from Settings > Media Settings > Import Library), or rescan your sources to begin populating the MySQL database from scratch. Do that now.

When that’s done and your library is back in place, you can hop over to your MySQL command prompt and check to make sure Kodi created and populated the databases. At the mySQL comment prompt, run:

SHOW DATABASES;

It will output all the databases currently on the MySQL server. You should see, at minimum, at least the following databases: information_schema , mysql , and performance_scheme , as these are part of the MySQL installation itself. The default database names for Kodi are myvideos107 and mymusic60 (we’re not using a database for music in our example, so only our video database is appearing in the list).

If you ever need to remove a database from your MySQL server, you can use the following command:

DROP DATABASE databasename;

Empty databases take up hardly any space, and won’t negatively impact the performance of your syncing system, but it’s nice to keep things tidy.

If your databases are there, that’s a good start, but it’s worth performing a simple check to see if Kodi is properly populating the databases. From the MySQL command prompt run the following commands (replacing databasename  with the name of your video database):

SELECT COUNT(*) from databasename.movie;
SELECT COUNT(*) from databasename.tvshow;

Each query will return the total number of movies and television shows, respectively, contained in your library (according to the the MySQL database). As you can see, in our case, it is recognizing our library with 182 movies and 43 TV shows:

If the number of entries is zero, there is a problem somewhere along the line. Here’s is a quick troubleshooting checklist of common mistakes:

  • Did you copy the advancedsettings.xml file to your machine before you started Kodi and re-populated your library?
  • Did you use the GRANT ALL command to give the Kodi account access to the MySQL server?
  • Did you open port 3306 on the MySQL host machine’s firewall?
  • Are your sources valid and scannable when you remove the advancedsettings.xml file and revert to the local database? If not, you’ll need to troubleshoot your sources independently of your MySQL problems.

If everything looks good and your SELECT COUNT query pans out, that means you’re ready to start taking advantage of the cross-media-center syncing.

Step Five: Repeat Step Four for Your Other Kodi Machines

The hard part is over! Now you just need to go to each of your other Kodi machines and place the same text in the advancedsettings.xml file that you did in step four. Once you do so (and restart Kodi on that machine), it should immediately grab your library information from the MySQL server (instead of you needing to re-populate the library yourself).

On some devices, like Raspberry Pis running LibreELEC, you’ll need to go into the Network settings and make sure “Wait for network before starting Kodi” is turned on for this to work properly.

In addition, if your videos are on a share that requires a password, and you get an error after setting up your advancedsettings.xml on a new machine, you may have to go to the “Files” view, click “Add Videos”, and access a folder on the share so Kodi prompts you for your credentials. You can then click “Cancel” or add the source as containing “None” type of media.

From there, try watching a video on one box. You should find that when you’re finished, it shows as “watched” on your other Kodi devices as well! You can even stop a video on one machine, then pick up where you left off just by selecting it to play on another machine. Enjoy your new whole-house library syncing!

Image Credit: FLIRC Kodi Edition Raspberry Pi Case

Whitson Gordon is is the editor-in-chief of How-To Geek. He is also a Windows user, PC builder, metalhead, chopstick-using potato chip eater, and Midwest-to-Southern California transplant. You can follow his nerdy exploits on Twitter and Facebook.


Jason Fitzpatrick is a warranty-voiding DIYer who spends his days cracking opening cases and wrestling with code so you don't have to. If it can be modded, optimized, repurposed, or torn apart for fun he's interested (and probably already at the workbench taking it apart). You can follow him on if you'd like.