共计 2375 个字符,预计需要花费 6 分钟才能阅读完成。
MySQL 的主从复制是异步的,分 master/slave,在 master 端存在一个 IO 线程,而在 slave 下存在 IO 及 Sql 线程。
搭建环境最重要的地方在于将 mysql 的二进制日志功能开启,我在搭的过程中有个细节没注意,坑了我好久。
环境:
我的两台虚拟机上网方式都是采用桥接模式,不推荐 nat. 首先对两台虚拟机设置固定 ip 地址,和你的物理机的 ip 地址在一个段内,这样你的虚拟机就很类似一台局域网的物理机工作了。
————————————– 分割线 ————————————–
Ubuntu 下 Nginx 做负载实现高性能 WEB 服务器 5 —MySQL 主主同步 http://www.linuxidc.com/Linux/2012-06/61687p5.htm
生产环境 MySQL 主主同步主键冲突处理 http://www.linuxidc.com/Linux/2013-07/86890.htm
MySQL 主从失败 错误 Got fatal error 1236 http://www.linuxidc.com/Linux/2012-02/54729.htm
MySQL 主从复制,单台服务器上实施 http://www.linuxidc.com/Linux/2013-03/81913.htm
————————————– 分割线 ————————————–
设置固定 ip 地址:
$ sudo vim /etc/network/interfaces
如下:
# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.1.252
netmask 255.255.255.0
gateway 192.168.1.1
$ sudo /etc/init.d/networking restart
我的虚拟机地址各设为:192.168.1.251 192.168.1.252 网关 IP:192.168.1.1
设置完后,首先在虚拟机中互 ping,必须保证能通。
环境准备好后,可以开始了,我没有采取 rpm 方式,ubuntu 下直接在线安装 mysql 非常方便的,省去了很多步骤。
$ sudo apt-get install mysql-server
默认安装完自动开启的,所以用 netstat -tap|grep mysql 看看是不是 mysql 服务存在了
之后查询下 mysql 运行状态,service mysql status, 同样,还有其他命令,service mysql start/stop/restart.
如果出现了以下信息,则代表成功了。
mysql start/running, process 1199
在登陆前先到 /etc/mysql/my.cnf 下 将 bind-address 注释掉,因为默认只能本机访问。
登陆 mysql
mysql -u root -p
grant replication slave,reload,super on *.* to slave @192.168.1.152 identified by ‘1234’
然后在另一台 Ubuntu 下远程测试下
mysql -u slave -h 192.168.1.151 -p
前期工作准备好了,现在就开始配置:
在 master 192.168.1.251 的机子上对 my.cnf 修改,切记以下配置信息一定要加到【mysqld】模块中,放在文件其他位置会导致 master 配置失败。
server-id=1
log_bin=/var/log/mysql/mysql-bin.log
binlog_do_db=student
binlog_ignore_db=mysql
重启下 mysql
sudo /etc/init.d/mysql restart
如果在重启过程中 failed,建议先看下 my.cnf 的 log-error 对应得错误日志文件位置,然后 cat 看下报错信息
之后进入 master 的 mysql,首先看下二进制功能是否 on.
show variables like ‘log%’
如果为 off 代表没开启,则还是返回检查下 my.cnf 文件,是否放在 [mysqld] 那块中等。文件路径是否对了
show master status; 则能看到对应得 file position 信息,这些在从机设置的时候要用到。
最后到 salve 192.168.1.252 的 /etc/mysql/my.cnf 下配置:
server-id=2
log_bin=/var/log/mysql/mysql-bin.log
replicate_do_db=student
重启下 mysql
sudo /etc/init.d/mysql restart
slave 进入 mysql:
stop slave
然后设置从 master 复制日志配置
change master to master_host=’192.168.1.151′ ,master_user=’slave’,master_password=’1234′,
master_log_file=’log.000004′,master_log_pos=94;
log_file log_pos 则是在 master 下 show master status 看到的 file position 信息。
start slave;
show slave status\G
在出现的信息中找到 Slave_IO_Running/Slave_SQL_Running,都为 YES 则成功了。
如果出现了 NO,则还是查看 log-error 日志文件,会比较清晰的描述出来的。