Setting up MySQL master to slave replication
First you need to configure MySQL to run on a reachable socket both on the master and slave, something else then localhost. Assign each server with an unique server id. Make a snapshot of the current database. Import that into the slave system. Create a user on the master that is allow to replicate. Set up the master configuration on the slave.
Set up MySQL to listen on a reachable socket and assign an unique id to master/slave.
My master system is running ubuntu 18.04 lts and is running MySQL v5.7. Configuration files are under.
/etc/mysql/Set server-id to something unique for each server. For example set master server-id to 1 and set server-id for slave to 2. Configuration for master.
[mysqld]
# listen on any interface
bind-address=0.0.0.0
# set server-id master
server-id=1My slave runs FreeBSD v12.1 with MySQL v80 installed. Configuration files are under.
/usr/local/etc/mysqlConfiguration for the slave server.
note: Make sure skip-networking is commented out, from both master and slave.
[mysqld]
# listen on any interface
bind-address=0.0.0.0
# set server-id master
server-id=2Restart both servers
Dump the to be replicated database from the master server and create replication user.
To connect to the mysql server.
mysql -u root -pRun following commands on the MySQL shell
CREATE USER replica IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'replica'@'hostname/ip' IDENTIFIED BY 'password';
USE exampledb;
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
QUIT;
Show master status will show a table with File and Postion. Both values are required to make this work. Make sure to copy them somewhere. Once logged out run.
 mysqldump -u root -p --master-data --datbases exampledb > exampledb.sqlAfter that's done log back into MySQL
mysql -u root -pRun following commands on the MySQL shell
UNLOCK TABLES;
QUIT;
Setting up slave to connect to the master
Connect on the slave server to MySQL
mysql -u root -p
STOP SLAVE;
CREATE DATABASE exampledb;
QUIT;Import the master data
mysql -u root -p exampledb <exampledb.sqlConnect on the slave server to MySQL
mysql -u root -pIn order to sync the slave database to the master database we need to create it first and finally change the master configuration
STOP SLAVE;
CHANGE MASTER TO 
MASTER_HOST='master ip', 
MASTER_USER='replica', 
MASTER_PASSWORD='password', 
MASTER_LOG_FILE='mysql-bin.001', 
MASTER_LOG_POS=100; 
START SLAVE;
QUIT;The master log file you got from running show master status previously. These values need to be set to what they where when you ran that command.
Note: !! First stop slave then create configure master then start slave !!