Mysql Master&Slave 实战
从开始着手做Mysql的Master&Slave模式到现在好长一段时间了,中间由于遇到问题也停了一段时间,今天早上总算配好了,这里就分享一下自己的经验和其中遇到的问题!
刚开始的时候我也没有直接去Mysql的官网去查看手册,而且用google搜索了2篇网上其他同学的教程。如果第一次接触mysql的主从,可以去这里,看看这位同学写的东西吧,里面包含了Mysql主从的工作原理,是一个不错的入门教程。下面我们就进入正题吧!
实验环境
服务器A(master):192.168.10.8
服务器B(Slave):192.168.10.10
服务器A、B系统环境:CentOS 6.3
Mysql版本:.5.5.31
配置Master主机
编辑A服务器上面mysql的配置文件,开启Mysql的bin-log功能和设置Master相关参数和被复制数据库的相关参数。
[root@king-centos ~]# vim /etc/my.cnf
##主从配置服务器ID号,保持主从服务器不要一致
server-id=1 ## Mysql开启bin-log功能 ##log-bin=/data/mysql/binlog/mysql-bin.log log-bin=mysql-bin.log ## Multiple db can use ”,” separation ## 设置被从服务器复制的数据库名称 binlog-do-db=master
Notice: 这里需要注意的是,像博主使用的是yum第三方源的mysql版本,在配置bin-log时,自定义目录时,mysqld无法启动,但是不适用自定义目录,在mysql默认目录一切正常。具体原因博主亦是不是十分清楚,把它归在于mysql编译时的配置问题上了。我用一个二进制版本的5.7的就可以自定义bin-log的路径。
然后下面就是创建用于从服务器访问的用户:
mysql> GRANT REPLICATION SLAVE ON *.* TO ’slave10′@”192.168.10.%” IDENTIFIED BY ’123456′; mysql> FLUSH PRIVILEGES;
下面就是记录当前master服务器的状态:
mysql> FLUSH TABLES WITH READ LOCK; mysql> SHOW MASTER STATUS\G; *************************** 1. row *************************** File: mysql-bin.000007 Position: 107 Binlog_Do_DB: master Binlog_Ignore_DB: 1 row in set (0.00 sec) mysql> UNLOCK TABLES;
配置Slave主机
编辑从服务器配置文件my.cnf,命令和上面相同。
server-id = 3 log-bin = mysql-bin-log ## 从服务器从主服务器复制数据库名称,多个数据库可以用”,”分割 replicate-do-db = master
Notice:这里需要注意的是如果你把主从服务的server-id配成一样的,会爆下面这个错误:
Slave_IO_Running: No
Slave_SQL_Running: Yes
Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids;
即IO相关进程无法启动。
此时需要同步Mysql进行主从复制的数据,我的方法是使用mysqldump把主服务器的数据库导出然后使用mysql进行同步。
同步完数据库以足够权限的用户登录mysql,不熟悉的话就使用root就好!
mysql> CHANGE MASTER TO MASTER_HOST=’192.168.10.8′, -> MASTER_USER=’slave10′, -> MASTER_PASSWORD=’123456′, -> MASTER_LOG_FILE=’mysql-bin.000007′, ->MASTER_LOG_POS=107;
这里需要注意的一下是,针对mysql5.1版本或者以前版本也可以通过配置my.cnf文件达到相同的目的.
例如:
server-id = 2 log_bin = mysql-bin master-host =192.168.10.10 master-user =slave10 master-pass =123456 master-port =3306 master-connect-retry=60 #如果从服务器发现主服务器断掉,重新连接的时间差(秒) replicate-do-db =master#只复制某个库 replicate-ignore-db=mysql #不复制某个库
但是如果在mysql的5.5中做这种配置就会出现如下错误:
130620 6:04:52 InnoDB: 5.5.31 started; log sequence number 1609072
130620 6:04:52 [ERROR] /usr/libexec/mysqld: unknown variable ‘master-host=192.168.10.10′
下面就是启动mysql的slave进程了:
mysql> start slave; mysql> show slave status \G; …… Slave_IO_Running: Yes Slave_SQL_Running: Yes ……
找到上面的内容,那么我就可以去试试看看,目前来说,我们的主从已经配置好了!
我们可以到master服务器上面的表中添加一条记录,然后看看从服务器会不会自动复制,如果自动复制了。那么,Congratulations,我们的mysql master&slave配置好了!
最后附上mysql手册中相关资料地址:http://dev.mysql.com/doc/refman/5.1/zh/replication.html#replication-howto
近期评论