Ubuntu 12.04 MySQL 单向同步
主服务器(A):192.168.1.6
从服务器(B):192.168.1.8
同步数据库:dbshop
最终实现:B服务器单向从A服务器同步数据库信息。
主服务器:
先去A服务器(主)将/etc/mysql/my.cnf里的
1 |
bind-address 127.0.0.1 |
注释掉
1 |
#bind-address 127.0.0.1 |
或者修改为
1 |
bind-address 0.0.0.0 |
这是因为mysql默认只允许本地连接,注释掉或者修改为0.0.0.0这样,就可以支持远程连接了。如果这里不设置,即使在数据库中设置用户可以通过远程连接,也是无法连接的。
通过然后进入mysql的命令行界面,设置用户,我们假定用户名是dbtest
如果数据库中已经有了用户,且已经设置了他可以从B服务器(192.168.1.8)访问A服务器,那么我们只需要用如下命令即可
1 |
grant replication slave,reload,super on *.* to dbtest@192.168.1.8 |
假如该用户不存在,那么我们用下面的命令建立即可
1 |
grant replication slave,reload,super on *.* to dbtest@192.168.1.8 identified by '123456' |
设置完成后,最好从服务器B远程连接下服务器A中的数据库测试一下,看是否正常登录。
修改A服务器(主)/etc/mysql/my.cnf 内容
1 2 3 4 |
server-id=1 log_bin=/var/log/mysql/mysql-bin.log binlog_do_db=dbshop binlog_ignore_db=mysql |
上面的内容,在my.cnf是存在的,只是被注释掉了,我们可以去掉注释,然后修改成自己的信息,需要修改 binlog_do_db 和 binlog_ignore_db(如果需要用的话)即可。如果没有这些内容,直接添加就可以。
binlog_do_db 是需要同步的数据库,如果有多个写多行即可
binlog_ignore_db是不需要同步的数据库,如果有多个写多个即可,不写也行
重启一下mysql
1 |
service mysql restart |
再次进入mysql命令行界面,输入
1 |
show master status; |
回车后看到如下内容
1 2 3 4 5 6 |
+------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000002 | 106 | dbshop | mysql | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec) |
OK了,主服务器配置告一段落,这个显示的内容后面还有用到。
从服务器(B):
配置一下my.cnf文件中的内容
1 2 3 |
server-id=2 log_bin=/var/log/mysql/mysql-bin.log replicate_do_db=dbshop |
重新启动一下mysql
1 |
service mysql restart |
进入mysql命令行界面,输入
1 2 3 4 5 6 7 8 |
CHANGE MASTER TO MASTER_HOST='192.168.1.6', MASTER_USER='dbtest', MASTER_PASSWORD='123456', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=0, MASTER_CONNECT_RETRY=60; |
MASTER_LOG_FILE的值,是上面 show master status 显示中的内容
MASTER_CONNECT_RETRY 重试间隔60秒,当主从服务器连接意外断开时数据库每隔60秒进行一个重新连接
然后输入
1 2 |
start slave; show slave status\G |
在显示的内容如果有
Slave_IO_Running=Yes
Slave_SQL_Running=Yes
表明slave的I/O和SQL线程都已经开始运行
这样mysql单向数据同步就完成了。