1.本人选择的是MYSQL5.5的版本rpm包在linux上安装的mysql:
mysql安装完成后先配置my.cnf
由于权限问题,这里直接使用skip-grant-tables
注意:主从机器的my.cnf中的server_id不能一样!!!(我找了半天原因)
log-bin=mysql-bin 开启二进制日志
注意:二进制日志必须开启,因为数据的同步实质上就是其他的MySQL数据库服务器将这个数据变更的二进制日志在本机上再执行一遍。
2.环境说明:
两台linux虚拟主机
Linux版本CentOS6.6、MySQL 5.5
ip:192.168.1.92(主)、192.168.1.100(从)
3.开始构建主从复制:
第一步:
在192.168.1.92(主)中创建一个192.168.1.100(从)主机中可以登录的MySQL用户
用户:user100
密码:123456
mysql>GRANT REPLICATION SLAVE ON *.* TO ‘user100’@’192.168.1.100’ IDENTIFIED BY ‘123456’;
mysql>FLUSH PRIVILEGES;
第二步:
查看192.168.1.92(主)MySQL服务器二进制文件名与位置
mysql>SHOW MASTER STATUS;
注意:如果主机的数据库不是新安装的情况下,这里的mysql-bin.0000xx,可能不是这个,此时需要清空二进制日志,也就是初始化:在mysql命令行执行:RESET MASTER;即可,执行完后重新查看。
第三步:
告知二进制文件名与位置
在192.168.1.100(从)中执行:
mysql>CHANGE MASTER TO
>MASTER_HOST=’192.168.1.92’,
>MASTER_USER=’user100’,
>MASTER_PASSWORD=’123456’,
>MASTER_LOG_FILE=’mysql-bin.000001’,
>MASTER_LOG_POS=107;
如下图:
完成配置!
4、测试主从复制是否成功
在192.168.1.100(从)中
mysql>SLAVE START; #开启复制
mysql>SHOW SLAVE STATUS\G #查看主从复制是否配置成功
当看到Slave_IO_Running: YES、Slave_SQL_Running: YES才表明状态正常
测试完毕!
实际测试:登陆192.168.1.92(主)mysql
说明:
Slave_IO_Running:连接到主库,并读取主库的日志到本地,生成本地日志文件
Slave_SQL_Running:读取本地日志文件,并执行日志里的SQL命令。
192.168.1.92主MySQL操作:
mysql>create database aa;
mysql>use aa;
mysql>create table tab1(id int auto_increment,name varchar(10),primary key(id));
mysql>show databases;
mysql>show tables;
192.168.1.100(从
)从MySQL操作:
mysql>show databases;
mysql>show tables;
由上面两个结果图可得知,两主机达到了数据同步。主从复制的配置完成。
注意:
可能会出现的问题总结:
问题1.MySQL主从同步故障
Slave_SQL_Running: No
一般是事务回滚造成的:
解决办法一:
mysql> slave stop;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> slave start;
解决办法二、
首先停掉Slave服务:slave stop
到主服务器上查看主机状态:
记录File和Position对应的值
进入master
mysql> show master status;
+----------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+----------------------+----------+--------------+------------------+
| localhost-bin.000094 | 33622483 | | |
+----------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
然后到slave服务器上执行手动同步
如果还是出现,可以重复执行解决方法一!意思就是跳过错误,即可!(从机在拿主机的数据时,出现了sql错误导致的)
问题2:Mysql提示you need the SUPER privilege for this operation
这是权限问题,解决办法:
解决办法:
修改mysql登录设置
vi /etc/my.cnf
在[mysqld]段中加入 skip-grant-tables
保存之后重启mysql服务
service mysqld restart