1、必须保证两边的mysql版本一致 **
可以使用命令行查看两边的mysql版本:
mysql -V
mysql Ver 14.14 Distrib 5.6.29, for Linux (x86_64) using EditLine wrapper
2、修改主从服务器的mysql的配置文件
master服务器配置:vi /etc/my.cnf ## 这里根据个人的my.cnf安装位置的差异有所差异[mysqld]server-id=202 #设置服务器唯一的id,默认是1,我们设置ip最后一段,slave设置203log-bin=mysql-bin # 启用二进制日志#binlog-ignore-db = mysql,information_schema #忽略写入binlog的库slave服务器配置:vi /etc/my.cnf[mysqld]server-id=203replicate-do-db = abc #只同步abc库slave-skip-errors = all #忽略因复制出现的所有错误
4、在主服务器上建立帐户并授权slave
mysql -u root -p
mysql>GRANT REPLICATION SLAVE ON *.* to 'mysql_copy'@'47.92.147.128' identified by 'qwqwqw33';
5、查看主服务器的状态:
mysql>show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000024 | 1957798 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
6、配置从数据库
mysql> change master to
-> master_host='主服务器ip',
-> master_user='mysql_copy',
-> master_password='账户密码',
-> master_log_file='mysql-bin.000024', ## 参考上面的 show master status;
-> master_log_pos=1957798; ## 参考上面的 show master status;
Query OK, 0 rows affected, 2 warnings (0.01 sec)
#Log和pos是master上随机获取的。这段也可以写到my.cnf里面。=》没尝试过,自己试。
7、启动slave同步进程并查看状态:
mysql>start slave;
mysql>show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Connecting to master
Master_Host: 192.168.1.1
Master_User: mysql_copy
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000024
Read_Master_Log_Pos: 1957798
Relay_Log_File: iz8vbgr24whlzfnzrsp683z-relay-bin.000001
Relay_Log_Pos: 4
Relay_Master_Log_File: mysql-bin.000024
Slave_IO_Running: Connecting ## 报错了!必须是yes
Slave_SQL_Running: Yes ## 必须是yes
Replicate_Do_DB: test
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Slave_IO_Running 和 Slave_SQL_Running 必须是yes;
解决办法:http://blog.csdn.net/i_bruce/article/details/17055135
但是不适用我们的情况,我们是因为阿里云的防火墙的原因,导致Mysql不能被外网联通,解决办法:
(1)查看防火墙规则:(iptables语法:http://www.cszhi.com/20120717/iptables-sample.html)
iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
ACCEPT tcp -- anywhere anywhere tcp dpt:http
DROP tcp -- anywhere anywhere tcp dpt:mysql ## mysql在防火墙规则里被drop
ACCEPT icmp -- anywhere anywhere icmp echo-request
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
ACCEPT tcp -- anywhere anywhere tcp dpt:http
DROP tcp -- anywhere anywhere tcp dpt:mysql
ACCEPT icmp -- anywhere anywhere icmp echo-request
(2)插入新规则
(3)删除旧规则
iptables -D INPUT 6 ## 6 是第六行的意思,删除第六行那条规则
(4)存盘 =》 但是改完,必须存盘,否则就会机子重启之后,就会又需要重新配置。
iptables-save
==========================================
start slave 和 stop slave 的时候,报错:
ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository
解决办法:
reset slave
===================================
关于slave的命令:
mysql>stop slave;
mysql>start slave;
mysql>reset slave;
============================================
记录一下主从的问题:
1、发现在主库上做操作,从库有反应,但是在从库插入数据,主库没有反应,是这样吗?
2、读写分离,我参考这个:http://lizhenliang.blog.51cto.com/7876557/1305083
===========================================
wencenter框架项目配置主从:
http://wenda.wecenter.com/article/1444
=======================
参考文献:http://lizhenliang.blog.51cto.com/7876557/1290431
来源:http://www.cnblogs.com/meiping/p/6905383.html