This tutorial describes how to set up database replication in MySQL. MySQL replication allows you to have an exact copy of a database from a master server on another server (slave), and all updates to the database on the master server are immediately replicated to the database on the slave server so that both databases are in sync. This is not a backup policy because an accidentally issued DELETE command will also be carried out on the slave; but replication can help protect against hardware failures though.
1 Configure the Master
Edit /etc/mysql/my.cnf:
Under the section [mysqld] add the following lines or comment out if already present
#skip-networking
#bind-address = 127.0.0.1
And again in /etc/mysql/my.cnf under [mysqld] section add
server-id=1
skip-name-resolve
log-bin=/var/log/mysql/mysql-bin.log
binlog-do-db=wpdb
Replace wpdb with your database name
Restart the mysql server
root@master# /etc/init.d/mysql restart
Then we log into the MySQL shell as root and create a user with replication privileges:
root@master# mysql -u root -p
Enter password:
GRANT REPLICATION SLAVE ON wpdb.* TO 'slave_user'@'%' IDENTIFIED BY 'some_password';
FLUSH PRIVILEGES;
Replace wpdb, slave_user, some_password with your data.. also % can be replaced with your slave server ip address
Next, on same MySQL shell
USE wpdb;
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
quit;
It will show something like this:
Write down this information, you will need it later on the slave (in this case the info are mysql-bin.006 and 183)!
Now it is time to dump the wpdb database, on the linux shell prompt run the following command:
root@master# mysqldump -u root -p wpdb >wpdb.sql
Enter password:
Upload your database (wpdb.sql) on the slave server
Now go back to the MySQL shell
root@master# mysql -u root -p
Enter password:
And type
UNLOCK TABLES;
quit;
2 Configure The Slave
On the slave we first need to create the database wpdb:
root@slave# mysql -u root -p
Enter password:
CREATE DATABASE wpdb;
quit;
Import the database dump you made on the master into the newly created wpdb on the slave:
root@slave# mysql -u root -p wpdbNow edit /etc/mysql/my.cnf on the slave server
Add the following lines under [mysqld] section
server-id=2
skip-name-resolve
replicate-do-db=wpdb
relay-log=/var/log/mysql/mysql-relay-bin.log
log_bin=/var/log/mysql/mysql-bin.log
master-host=master_ip_address
master-user=slave_user
master-password=some_password
master-connect-retry=60Replace master_ip_address, slave_user, some_password with your data
In case you have MySQL 5.5+ The following options have been removed, just add to my.cnf the first 5 lines above and skip the master-* ones
–master-host
–master-user
–master-password
–master-port
-master-connect-retryRestart the MySQL server
root@slave# /etc/init.d/mysql restartEnter againg the MySQL shell
root@slave# mysql -u root -p
Enter password:
SLAVE STOP;
CHANGE MASTER TO MASTER_HOST='master_ip_address', MASTER_USER='slave_user', MASTER_PASSWORD='some_password', MASTER_LOG_FILE='mysql-bin.006', MASTER_LOG_POS=183, MASTER_PORT=3306;
START SLAVE;
quit;MASTER_HOST is the IP address or hostname of the master server.
MASTER_USER is the user we granted replication privileges on the master server.
MASTER_PASSWORD is the password of MASTER_USER on the master server.
MASTER_LOG_FILE is the file MySQL gave back when you ran SHOW MASTER STATUS; on the master ( in this case mysql-bin.006 to be replaced with your value ) .
MASTER_LOG_POS is the position MySQL gave back when you ran SHOW MASTER STATUS; on the master ( In this case 183 to be replaced with your value ).
MASTER_PORT to set which port the master server is listening, optional if set to default 3306, be noted that master_port should not be quoted.Restart MySQL on both master and slave server
Usefull MySQL commands
Details of slave replication:
SHOW SLAVE STATUS\GList of MySQL user accounts:
select User,Host from mysql.user;Change password for a MySQL user:
update user set password=PASSWORD("NEWPASSWORD") where User='your user';
flush privileges;Add a read-only MySQL user:
CREATE USER 'read_only_username'@'%' IDENTIFIED BY 'password';Safest way to quickly rename a MySQL database:
$ mysqldump -u root -p olddb >~/olddb.sql
$ mysql -u root -p
mysql> create database newdb;
mysql> use newdb
mysql> source ~/olddb.sql
mysql> drop database olddb;- Setting up HyperDB on WordPress
1 On the Slave server edit /etc/mysql/my.cnf under [mysqld] and change as below:
#bind-address = 127.0.0.1
#skip-networkingRestart MySQL server
root@slave# /etc/init.d/mysql restartAdd a MySQL user
root@slave# mysql -uroot -p
Enter password:
mysql> CREATE USER mysql_user@'wordpress_server_ip_address' IDENTIFIED BY 'mysql_user_password';
mysql> GRANT ALL PRIVILEGES ON wordpress_database_name.* TO mysql_user@'wordpress_server_ip_address';
mysql> flush privileges;
mysql> quit;Replace mysql_user, wordpress_server_ip_address, mysql_user_password, wordpress_database_name with your data
2 On the WordPress server
Download hyperdb here,unzip and edit hyperdb/db-config.php
root@wordpress# wget https://downloads.wordpress.org/plugin/hyperdb.zip
root@wordpress# unzip hyperdb.zip
root@wordpress# vi hyperdb/db-config.phpGo to line 228
$wpdb->add_database(array(
'host' => SLAVE_IP_ADDRESS:PORT, // If port is other than 3306, use host:port.
'user' => mysql_user,
'password' => mysql_user_password,
'name' => wordpress_database_name,
'write' => 2,
'read' => 1,
'dataset' => 'global',
'timeout' => 0.2,
));Replace SLAVE_IP_ADDRESS:PORT, mysql_user, mysql_user_password, wordpress_database_name with your data
Save and quit the editor
Copy the hyperdb files into the wordpress directories, db-config.php into same directory where wp-config.php is and db.php in the wp-content/ directory
root@wordpress# cp hyperdb/db-config.php /var/www/html/wordpress/
root@wordpress# cp hyperdb/db.php /var/www/html/wordpress/wp-content/Replace /var/www/html/wordpress/ and /var/www/html/wordpress/wp-content/ with your wordpress paths
Once db.php is in place, hyperdb will be active. To disable remove db.php from wp-content/ directoryHow to check if hyperdb is working
root@wordpress# mysql -h SLAVE_IP_ADDRESS -u mysql_user -P 3306 -p
Enter password:If you can log into MySQL remotely then authentication is working
Shutdown the wordpress MySQL server and from a browser refresh your wordpress website.
If the website opens as usual it means the slave MySQL is working.
To be sure everything is ok restart wordpress MySQL and shutdown Slave MySQL server, refresh the Website and final
check shutdown both MySQL servers to get the usual error.
If between the above tests you are redirected to the initial wordpress installation wizard then add the following code to db-config.php, at the near end of the file, see below
shm_detach( $segment );
sem_release( $sem_id );
return $row[ 'lag' ];
}
*/
function wpdb_connection_error( $host, $port, $op, $tbl, $ds, $dbhname, $wpdb )
dead_db();
$wpdb->add_callback( 'wpdb_connection_error', 'db_connection_error' );
// The ending PHP tag is omitted. This is actually safer than including it.Reference links
https://dev.mysql.com/doc/index.html
http://MariaDB.org
http://httpd.apache.org
http://nginx.org
https://wordpress.org
https://wordpress.org/plugins/hyperdb/
How to: Setup Mysql Database Master and Slave with HyperDB on WordPress
Nessun commento:
Posta un commento