mysql主从复制

断了今生、忘了曾经 提交于 2019-11-26 22:38:04

 

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设置203
log-bin=mysql-bin # 启用二进制日志
#binlog-ignore-db = mysql,information_schema  #忽略写入binlog的库
 
slave服务器配置:
vi /etc/my.cnf
[mysqld]
server-id=203
replicate-do-db = abc     #只同步abc库
slave-skip-errors = all   #忽略因复制出现的所有错误
 
 
3、重启Mysql服务器
 
/etc/init.d/mysql restart

 

 

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)插入新规则

 iptables -I INPUT 5 -p tcp --dport 3306 -j ACCEPT   ## 5表示第五行,在第五行插入一条新的规则

(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

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!