1 工作原理
所谓主从同步,即在主库中的操作可以映射到从库中,从库的数据与主库保持一致。主从同步可以理解为一个复制的过程。分为3步:
- 主库将操作记录写入到一个文档中(binary log,二进制日志)
- 从库调用I/O线程将这个文档写到自己的文档中(relay log,中继日志)
- 最后从库调用SQL线程将文档中的操作,反映成数据库数据
MySQL双主架构,即两个数据库masterA,masterB互为主从,masterA是masterB的主库,masterB又是masterA的主库。
2 搭建过程
2.1 操作环境
操作系统版本:Ubuntu 16.04
在两台主机上分别安装虚拟机,搭建Ubuntu,配置网络为桥接模式,并在同一网段上(例如192.168.1.X)。
2.1.1 安装虚拟机
双击虚拟机安装包。
2.1.2 创建新的虚拟机
双击虚拟机VMware Workstation,创建新的虚拟机
2.1.3 配置Ubuntu环境
点击编辑虚拟机设置
选择一个镜像文件
等待安装。。。
2.1.4 安装数据库服务
右击打开终端
安装vim服务
安装MySQL服务
- 安装MySQL服务端
- 安装MySQL客户端
- 安装MySQL C语言管理
2.1.5 配置IP地址
1)sudo vim /etc/network/interfaces
添加IP地址、子网掩码、网关、dns(这里设置的是南京的)
2)重启网络
3)在命令行中输入ifconfig,此时的IP地址还没生效,需要重启虚拟机
可以看到,之前配置的IP地址生效了
4)虚拟机的默认网络模式是NAT模式,需要更改成桥接模式,找到虚拟机设置,快捷键Ctrl+d.
5)设置主机IP地址,图中有两个网络,看你所连接的网络是哪个,就配置哪个。
此时,可以查看主机和虚拟机之间是否可以ping通。需要都在一个网段中。
主机1.10 ping 虚拟机 1.101
虚拟机1.101 ping 主机1.10
OK,一台主机上的网络通了。然后用同样的方法,在另一台主机在配置一次。下面是我配置的网络模型,4台机器之间是可以相互ping的。
2.2 配置主从同步
配置文件 /etc/mysql/mysql.conf.d/mysqld.cnf 中,设置启动参数。
1)主库masterA
在[mysqld]下配置
下面这个参数很重要,后面配置主主同步
重启数据库
进入数据库,创建从库的复制用户
数据库登录 mysql -u root -p
创建复制用户
账号:masterbackup
密码:masterbackup
从库IP:192.168.1.201
查看主库状态,记住文件名file和偏移量position
2)从库masterB
在[mysqld]下
登录从库
终止从库I/O线程和sql线程
确定主库的IP、用户名、密码、binlog文件、binlog位置等信息
启动线程
查看从库状态
至此,看到图中的两个yes表示,主从同步成功。
2.3 配置主主同步
将masterB作为主库,masterA作为从库,在配置一次,这样整个主主同步就完成了。
3 排错方法
- 网络是否通(互ping)
- 用户、密码和IP地址是否配对。
主库中,创建的是从库的复制账号,所以IP地址是从库的
从库中,连接的是主库,IP地址要写主库的,然后连接账号,密码,日志文件和偏移量是否写对。
在change master 这个语句之前要stop,之后要start
3. 谨慎使用reset master和reset slave,这个命令会将所有的日志文件和日志索引文件删除。
以上,是我搭建主主同步中所遇到的问题。
4 附录
参数 | 描述 |
server-id=n | 服务器的唯一标识号,不能相同 |
log_in=name | 启用二进制日志文件 |
log_in_index=filename | 二进制日志功能的索引文件名 |
binlog_ignore_db=dbname | 不同步的数据库 |
bing-address=ipaddr | 数据库的IP地址 |