您可以按照此article 进行数据库复制或按照以下步骤操作。
这里有一个 Falko Timme 编写的教程,它将展示如何将数据库 exampledb 从 IP 地址为 192.168.0.100 的主服务器复制到从服务器。两个系统(主系统和从系统)都在运行 Debian Sarge;但是,该配置应该适用于几乎所有的发行版,几乎不需要修改。
要配置master,我们首先要编辑/etc/mysql/my.cnf。我们必须为 MySQL 启用网络,并且 MySQL 应该监听所有 IP 地址,因此我们注释掉这些行(如果存在):
#skip-networking
#bind-address = 127.0.0.1
此外,我们必须告诉 MySQL 它应该为哪个数据库写入日志(这些日志被从站用来查看主站上发生了什么变化),它应该使用哪个日志文件,并且我们必须指定这个 MySQL 服务器是主人。我们要复制数据库exampledb,所以我们将以下几行放入/etc/mysql/my.cnf:
log-bin = /var/log/mysql/mysql-bin.log
binlog-do-db=exampledb
server-id=1
然后我们重启 MySQL:
/etc/init.d/mysql restart
然后我们以 root 身份登录 MySQL 数据库并创建一个具有复制权限的用户:
mysql -u root -p
Enter password:
现在我们在 MySQL shell 上。
GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY '<some_password>'; (Replace <some_password> with a real password!)
FLUSH PRIVILEGES;
接下来(仍在 MySQL shell 上)执行以下操作:
USE exampledb;
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
最后一个命令将显示如下内容:
+---------------+----------+--------------+------------------+
| File | Position | Binlog_do_db | Binlog_ignore_db |
+---------------+----------+--------------+------------------+
| mysql-bin.006 | 183 | exampledb | |
+---------------+----------+--------------+------------------+
1 row in set (0.00 sec)
记下这些信息,我们稍后在slave上会用到它!
然后离开 MySQL shell:
quit;
有两种可能将现有的表和数据从 exampledb 从 master 获取到 slave。第一个是做数据库转储,第二个是使用 LOAD DATA FROM MASTER;从机上的命令。后者的缺点是在这个操作过程中master上的数据库会被锁住,所以如果你有一个大数据库在一个高流量的生产系统上,这不是你想要的,我推荐按照这里的第一种方法案子。不过,后一种方法速度很快,所以我在这里都介绍一下。
如果您想遵循第一种方法,请执行以下操作:
mysqldump -u root -p<password> --opt exampledb > exampledb.sql (Replace <password> with the real password for the MySQL user root! Important: There is no space between -p and <password>!)
这将在文件 exampledb.sql 中创建一个 exampledb 的 SQL 转储。将此文件传输到您的从服务器!
如果你想从 MASTER 加载数据;那么你现在什么都不需要做。
最后我们要解锁 exampledb 中的表:
mysql -u root -p
Enter password:
UNLOCK TABLES;
quit;