主服务器(A):192.168.1.6
从服务器(B):192.168.1.8
同步数据库:dbshop
最终实现:B服务器单向从A服务器同步数据库信息。
主服务器:
先去A服务器(主)将/etc/mysql/my.cnf里的
Shell
bind-address 127.0.0.1
1
bind-address127.0.0.1
注释掉
Shell
#bind-address 127.0.0.1
1
#bind-address 127.0.0.1
或者修改为
Shell
bind-address 0.0.0.0
1
bind-address0.0.0.0
这是因为mysql默认只允许本地连接,注释掉或者修改为0.0.0.0这样,就可以支持远程连接了。如果这里不设置,即使在数据库中设置用户可以通过远程连接,也是无法连接的。
通过然后进入mysql的命令行界面,设置用户,我们假定用户名是dbtest
如果数据库中已经有了用户,且已经设置了他可以从B服务器(192.168.1.8)访问A服务器,那么我们只需要用如下命令即可
Shell
grant replication slave,reload,super on *.* to dbtest@192.168.1.8
1
grantreplicationslave,reload,superon*.*todbtest@192.168.1.8
假如该用户不存在,那么我们用下面的命令建立即可
Shell
grant replication slave,reload,super on *.* to dbtest@192.168.1.8 identified by '123456'
1
grantreplicationslave,reload,superon*.*todbtest@192.168.1.8identifiedby'123456'
设置完成后,最好从服务器B远程连接下服务器A中的数据库测试一下,看是否正常登录。
修改A服务器(主)/etc/mysql/my.cnf 内容
PHP
server-id=1
log_bin=/var/log/mysql/mysql-bin.log
binlog_do_db=dbshop
binlog_ignore_db=mysql
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
Shell
service mysql restart
1
servicemysqlrestart
再次进入mysql命令行界面,输入
Shell
show master status;
1
showmasterstatus;
回车后看到如下内容
Shell
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000002 | 106 | dbshop | mysql |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
1
2
3
4
5
6
+------------------+----------+--------------+------------------+
|File|Position|Binlog_Do_DB|Binlog_Ignore_DB|
+------------------+----------+--------------+------------------+
|mysql-bin.000002|106|dbshop|mysql|
+------------------+----------+--------------+------------------+
1rowinset(0.00sec)
OK了,主服务器配置告一段落,这个显示的内容后面还有用到。
从服务器(B):
配置一下my.cnf文件中的内容
Shell
server-id=2
log_bin=/var/log/mysql/mysql-bin.log
replicate_do_db=dbshop
1
2
3
server-id=2
log_bin=/var/log/mysql/mysql-bin.log
replicate_do_db=dbshop
重新启动一下mysql
Shell
service mysql restart
1
servicemysqlrestart
进入mysql命令行界面,输入
Shell
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;
1
2
3
4
5
6
7
8
CHANGEMASTERTO
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秒进行一个重新连接
然后输入
Shell
start slave;
show slave status\G
1
2
startslave;
showslavestatus\G
在显示的内容如果有
Slave_IO_Running=Yes
Slave_SQL_Running=Yes
表明slave的I/O和SQL线程都已经开始运行
这样mysql单向数据同步就完成了。