环境准备:
在虚拟机上安装Cenos6.3,然后下载安装mysql,
关于在CenOS6.3下安装mysql-5.5.25这里就不在重复了,请看前面的博客http://shansongxian.blog.51cto.com/5040181/1429804 ,因为我们是作mysql主从服务器,肯定需要两台虚拟机来测试,如果再次去安装太麻烦了,这里我们使用vmware虚拟机的克隆功能,先将安装好的mysql服务器关闭,在所有的选项卡上右击----管理----克隆----克隆自“虚拟机中的当前状态----创建链接克隆,然后选择克隆保存路径即可,之所有不选择完全克隆是因为到时时间太长
启动克隆的虚拟机,这里我们还需要解决一个问题,克隆的虚拟机网卡设备无法识别启动
解决方法:1.删除/etc/udev/rules.d/70-persistent-net.rules后重启服务器
70-persistent-net.rules这个文件确定了网卡与MAC地址的绑定
2.重启服务器后使用vi打开/etc/udev/rules.d/70-persistent-net.rules这个文件,记住MAC地址,打开网络配置文件,将HWADDR= 修改为刚才的MAC地址再次重启服务器,网卡就可以使用了
mysql主服务器 IP=192.168.100.230 HOSTNAME=master.abc.com
mysql从服务器 IP=192.168.100.231 HOSTNAME=slave.abc.com
主服务器的配置
vim /etc/my.cnf
[mysqld]
log-bin=mysql-bin //[必须]启用二进制日志
server-id=230 //[必须]服务器唯一ID,默认是1,一般取IP最后一段
修改好配置文件后需要重启mysql服务
service mysqld restart
2.在主服务器上建立账户并授权
使用root用户登录mysql服务器
mysql>GRANT REPLICATION SLAVE ON *.* to 'huqiang'@'%' identified by 'hdzzjsj';
//一般不用root帐号,“%”表示所有客户端都可能连,只要帐号,密码正确,此处可用具体客户端IP代替,如192.168.100.231,加强安全。
mysql>flush privileges; //刷新系统权限表
3.查询主服务器master状态
mysql> mysql>show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000006 | 328 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
到这一步就不要动主服务器了,防止状态值发生变化
4.从服务器的配置
vim /etc/my.cnf
[mysqld]
log-bin=mysql-bin //[必须]启用二进制日志
server-id=231 //[必须]服务器唯一ID,默认是1,一般取IP最后一段
修改好配置文件后需要重启mysql服务
service mysqld restart
5.使用root用户进入从服务器
mysql> change master to master_host='192.168.100.230',master_user='huqiang',mync',master_password='hdzzjsj',master_log_file='mysql-bin.000006',master_log_pos=328;
//注意to后面是空格不要断开,“328”无单引号。
mysql> start slave; //启动从服务器复制功能
6.检查从服务器复制功能状态:
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.100.230 //主服务器地址
Master_User: huqiang //授权操作的用户,尽量不用root用户
Master_Port: 3306 //端口
Connect_Retry: 60
Master_Log_File: mysql-bin.000006
Read_Master_Log_Pos: 328
Relay_Log_File: www-relay-bin.000002
Relay_Log_Pos: 253
Relay_Master_Log_File: mysql-bin.000006
Slave_IO_Running: Yes //此状态必须YES
Slave_SQL_Running: Yes //此状态必须YES
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 328
Relay_Log_Space: 407
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 230
1 row in set (0.00 sec)
Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。
以上操作过程,主从服务器配置完成。
7.
主从服务器测试:
主服务器Mysql,建立数据库,并在这个库中建表插入一条数据:
mysql> create database jack;
mysql> use jack;
mysql> create table abc(
-> id int primary key auto_increment,
-> sname varchar(40) not null default '',
-> sex char(1) not null default ''
-> )engine myisam charset utf8;
mysql> insert into abc (sname,sex) values ('张三','男');
mysql> select * from abc;
+----+--------+-----+
| id | sname | sex |
+----+--------+-----+
| 1 | 张三 | 男 |
+----+--------+-----+
1 row in set (0.00 sec)
登入从mysql服务器,查看,OK了
如果从服务器并没有同步主服务器的数据,并且查看从服务器状态时,发现有一下错误信息:
“Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'”
这是由于主从服务器数据不同步造成的,这时可以通过以下几步来处理:
在从服务器上使用命令stop slave停止从服务器。
在主服务器上使用命令flush logs 刷新主服务器日志信息。
在主服务器上使用命令show master status ;查看主服务器状态,主要关注日志文件名称和位置偏移量(position)。
在从服务器上执行命令change master to master_log_file='mysql-bin.00004',master_log_pos=397;注意文件名和position和主服务器上对应。
使用命令start slave;启动从服务器的slave线程。
再次在主服务器表中插入数据,就应该能够正常同步了。
本文出自 “不变的时光---胡” 博客,谢绝转载!