您的位置:首页 > 数据库 > MySQL

在同一台机器上实现主从复制,多个mysql(windows)

2016-12-26 15:29 513 查看
最近在自学,看到了mysql的主从复制,觉得挺有意思的,就研究了下.无奈试了多种方法均以失败告终,最后只好在同一台机器上安装多个mysql.试试主从复制.
一共试了三种方式,目前只成功了一种.
1.用云服务器坐从服务器,本地的电脑做主服务器.但是因为电脑是在内网里面...无法被访问到.就使用了花生壳和nat123.进行端口映射.这样做之后,云服务器A(叫做A好了),可以通过映射的域名来访问本地的数据库了.但是在进行主从复制的配置的时候,似乎主机的IP地址就不能填写域名.(不清楚是不是这样).
因为直接通过映射的域名是可以访问到数据库中的数据的,但是一到主从复制,然后配置IP地址,填写的域名,就会报错.屡次不成功,然后我就试了第二种方式.
2.使用虚拟机和主机进行主从复制. 个人不是很会使用虚拟机这个东西.阻力在于虚拟机和主机能相互ping通,而且要在虚拟机上装上mysql.虚拟机装的是centos7.= =本人能力有限加上运气不好,怎么安装mysql都失败. 最后用源码安装成功后,还是无法访问本机的mysql.最终尝试了最简单,能够找回自信心的方式.在同一台机器上安装多个mysql.来实现mysql的主从复制.
 
首先.我本机上装了一个mysql5.6.  然后复制了mysql5.6在修改了  第二个mysql(叫mysql2好了)的my.ini.  就可以安装了两个mysql.
这个比较容易.可以参考http://www.cnblogs.com/yuechaotian/archive/2013/05/15/3079919.html.

然后在进行mysql的配置.
注:这里主机和从机因为是复制的,所以一开始它们的版本和数据库表结构什么的都是一致的.   因为我不知道数据库版本不一致和数据库表结构不一样会不会影响到主从复制.之后可能会尝试着试验一下.这两个变量对主从复制的影响.  (所以说在同一台机器上是最简单的方式,不用管版本,表结构,ip地址什么的)
1.在主机的my.ini(windows是这个,linux应该是/etc/my.cnf)添加一些配置
在[mysqld]下添加配置数据:
server-id=1     #服务器的标识  要和从服务器不一样
log-bin=mysql-bin  #二进制文件存放路径 (说明开启了二进制日志,关键点)

binlog-do-db=db1             #是你需要复制的数据库名称,如果有多个就用逗号“,”分开;或者分行写
binlog-ignore-db=mysql  #不参与主从的数据库名,不参与主从复制的数据库名mysql
保存,重启数据库服务。

2.给从服务器提供一个远程访问主服务器的账号
1.mysql>grant replication slave on *.* to mycat@localhost identified
by '123456' ;   创建一个远程访问的账户
2.mysql>flush privileges; 刷新权限,为了让这个账户能直接使用
3.mysql>show master status; # 找到File 和 Position 的值记录下来;(从服务器就是根据这个日志来复制的. 附上主从复制的原理http://machael.blog.51cto.com/829462/239112/)

3.从库的配置
server-id=2     #唯一
#设置要进行或不要进行主从复制的数据库名,同时也要在Master 上设定。
replicate-do-db=进行主从数据库名1 ,数据库名2
replicate-ignore-db=不进行数据库名1 ,数据库名2.这里跟主库的配置差不多

4.设置主库的信息.将从库和主库联系起来
mysql>change master to 
master_host='127.0.0.1',
master_user='mycat',
master_password='123456',
master_log_file='mysql-bin.000005',
master_log_pos=120;
这里的配置就是使用的上面主库的信息.还有日志文件的信息
5.
 mysql>start slave ;
mysql>show slave status\G;
如果出现:
Slave_IO_Runing:Yes
Slave_SQL_Running :yes
就说明成功了.然后你在主数据库的增删改查,看看从数据库.应该就会同步执行了.

不过不会这么顺利的= =.下面列出来一些我遇到的问题
1. Last_Error:XXX@localhost   失败.
没有截图了,这个是用户名和密码的问题.  
首先要明确是主库费从库开了一个账户mycat,然后从库在用这个账户登录主库,拿到二进制的日志.  
所以这个账户是在主库的.我一开始弄错了,把这个账户弄在了从库.所以报错.
 
还有一点.就是主库给从库开启权限的时候要细心一点,我从网上看到有的人是 'mycat  '@localhost这一步.用户名多了个空格.或者密码多了个空格所以导致从库访问主库失败.
因此,主库开启完权限后,要先试着用这个mycat的账户远程登录主库试试.能登录才进行下一步.

2. 错误号为1062的. 类似duplicate entry的错误.
这个可能是主从库的主键冲突.
解决方式:
方式1.在从库执行set global sql_slave_skip_counter=1 这个是用来跳过错误的.
方式2:删除主和从相应记录,在主库在重新加入该记录insert.

3.uuids:冲突
解决方式:修改主或者从的auto.cnf.
先使用select uuid(),获得一个随机的UUid.在修改auto.cnf中的uuid.记得改完重启mysql.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息