CentOS上的MySQL主/从复制

的MySQL 复制品 易于维护的过程 多份MySQL数据 通过自动复制它们 主从数据库。由于许多原因,这很有用。 后备 对于 资料如何进行分析,而无需使用主数据库或仅作为一种扩展手段。

本教程涵盖以下非常简单的示例: mysql复制—一个主机将信息发送到单个从机。为了使该过程正常进行,您需要两个IP地址。一个是主服务器,另一个是从服务器。

1.运行Linux操作系统(在本例中为CentOS 6.5)2.主服务器和从服务器是CentOS 6.5 Linux服务器。 3.主IP地址为192.168.100.1。 4.从站IP地址为192.168.100.2。

配置主服务器进行复制

如果你没有 MySQL的可以使用安装 YUM命令。如果你已经有 的MySQL 安装方式,您可以跳过此步骤。

# yum install mysql-server mysql

在主服务器上配置MySQL

在nano编辑器中打开my.cnf配置文件。

# nano /etc/my.cnf

添加以下条目 [mysqld] 在本节中,请不要忘记将lintut替换为要在从属服务器上复制的数据库的名称。

# [mysqld] section
# Start Modification
# First line is probably already there
server-id = 1
binlog-do-db=lintut
expire-logs-days=7
relay-log = /var/lib/mysql/mysql-relay-bin
relay-log-index = /var/lib/mysql/mysql-relay-bin.index
log-error = /var/lib/mysql/mysql.err
master-info-file = /var/lib/mysql/mysql-master.info
relay-log-info-file = /var/lib/mysql/mysql-relay-log.info
log-bin = /var/lib/mysql-bin.log

重新启动MySQL服务。

# service mysqld restart

现在您需要告诉MySQL在哪里复制和向谁复制。以root用户身份登录到MySQL,创建一个slave用户,并授予复制特权。将“ slave_user”替换为“ user”,将“ your_password”替换为您的密码。

# mysql -u root -p
mysql -u root -p
mysql> STOP SLAVE;
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'slave_password';
mysql> FLUSH PRIVILEGES;
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File | POSITION | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 451228 | lintut | |
+------------------+----------+--------------+------------------+
1 ROW IN SET (0.00 sec)

记下文件和位置号,因为这是复制开始的位置。在这里,建议您创建主数据库的转储并将其通过管道传输到从服务器。

mysqldump -u root --all-databases --single-transaction --master-data=1 > /home/datadump.sql

转储所有数据库后,以root用户和unlcok表的身份再次连接到mysql。

mysql> UNLOCK TABLES;
mysql> quit;

将数据库转储上载到从属服务器(使用scp命令):

scp datadump.sql [email protected]:/root

主服务器已成功配置。

配置从属服务器

首先安装mysql服务器(使用yum逗号):

yum install mysql mysql-server -y

将SQL转储文件导入MySQL。

mysql -u root -p < datadump.sql

然后在从属服务器上执行相同的操作

nano /etc/my.cnf
# [mysqld] section
# Start Modification
# First line is probably already there
server-id = 2
master-host=192.168.100.1
master-connect-retry=60
master-user=slave_user
master-password=yourpassword
replicate-do-db=lintut
relay-log = /var/lib/mysql/mysql-relay-bin
relay-log-index = /var/lib/mysql/mysql-relay-bin.index
log-error = /var/lib/mysql/mysql.err
master-info-file = /var/lib/mysql/mysql-master.info
relay-log-info-file = /var/lib/mysql/mysql-relay-log.info
log-bin = /var/lib/mysql/mysql-bin
# Stop Modification

现在,配置从服务器从主服务器读取,从您先前写下的记录位置开始。确保您已在数步之前使用过MASTER_LOG_FILE和MASTER_LOG_POS。

mysql> CHANGE MASTER TO MASTER_HOST='192.168.100.1', MASTER_USER='slave_user', MASTER_PASSWORD='slave_password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=451228;
mysql> START SLAVE;
mysql> SHOW SLAVE STATUSG;

验证MySql复制

在主服务器上创建测试数据库

mysql> create database lintut;
mysql> use lintut;
mysql> CREATE TABLE test (item int);
mysql> INSERT INTO test (item) VALUES (testitem);
mysql> SELECT * FROM test;
+------------+
| item |
+------------+
| testitem |
+------------+
1 row in set (0.00 sec)

在从属服务器上执行命令。

mysql> use lintut;
mysql> SELECT * FROM test;
+------------+
| item |
+------------+
| testitem |
+------------+
1 row in set (0.00 sec)

如果不是,请检查MySQL错误日志以找到问题的根源。

Sidebar