MySQL主从复制 1、简介 我们为什么要用主从复制?主从复制目的: 可以做数据库的实时备份,保证数据的完整性; 可做读写分离,主服务器只管写,从服务器只管读,这样可以提升整体性能。 原理图: 2、VMware安装 CentOS-7-x86_64-DVD-1511.iso 此步骤略过 暂时分配2G空间,等所有都安装完毕就改成1G (为了安装软件快速 电脑内存8G) 先装两台,在装一台 分配IP为 192.168.0.220、192.168.0.221、192.168.0.222 简单起见root 和 myql密码 都为123456 安装成功后安装两个软件 yum install wget #获取软件 yum install net-tools #ifconfig 工具 3、安装mysql 并修改密码(centos7删除了MySQL,所以我们找到其他源) wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm rpm -ivh mysql-community-release-el7-5.noarch.rpm yum install mysql-server service mysqld restart mysql -u root use mysql; update user set password=password('123456') where user='root'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; -- 配置外网访问 FLUSH PRIVILEGES; 4、 设置静态ip ,端口开放,以及防火墙的关闭。 vi /etc/sysconfig/network-scripts/ifcfg-eno16777736 BOOTPROTO=static #dhcp改为static(修改) ONBOOT=yes #开机启用本配置,一般在最后一行(修改) IPADDR=192.168.0.222 #静态IP(增加)192.168.0.221 GATEWAY=192.168.0.1 #默认网关,虚拟机安装的话,通常是2,也就是VMnet8的网关设置(增加) NETMASK=255.255.255.0 #子网掩码(增加) DNS1=192.168.0.1 #DNS 配置,虚拟机安装的话,DNS就网关就行,多个DNS网址的话再增加(增加) 关闭防火墙 修改/etc/selinux/config 文件 将SELINUX=enforcing改为SELINUX=disabled 重启 1、关闭firewall: systemctl stop firewalld.service systemctl disable firewalld.service systemctl mask firewalld.service 2、安装iptables防火墙 yum install iptables-services -y 3.启动设置防火墙 # systemctl enable iptables # systemctl start iptables 4.查看防火墙状态 systemctl status iptables 5编辑防火墙,增加端口 vi /etc/sysconfig/iptables #编辑防火墙配置文件 -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT :wq! #保存退出 3.重启配置,重启系统 systemctl restart iptables.service #重启防火墙使配置生效 systemctl enable iptables.service #设置防火墙开机启动 5.配置主从复制 重复以上步骤安装三台机器 然后把内存设置为1G,接下来配置主从 在master服务器建立账号(backup 密码 123456) 可以让slave复制 use mysql; GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO backup@'192.168.0.%' IDENTIFIED BY '123456'; FLUSH PRIVILEGES; 接下来对master进行配置(/etc/my.cnf),包括打开二进制日志,指定唯一的servr ID。例如,在配置文件加入如下值: server-id=1 log-bin=mysql-bin server-id:为主服务器A的ID值 log-bin:二进制变更日值 重启master,运行SHOW MASTER STATUS 从服务器 server-id顺延 log-bin = mysql-bin server-id = 2 relay-log = mysql-relay-bin log-slave-updates = 1 read-only = 1 重启服务slave CHANGE MASTER TO MASTER_HOST='192.168.0.220', MASTER_USER='backup', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=0; MASTER_LOG_POS的值为0,因为它是日志的开始位置。 你可以用show slave status \G语句查看slave的设置是否正确: Slave_IO_State, Slave_IO_Running, 和Slave_SQL_Running是No 表明slave还没有开始复制过程。日志的位置为4而不是0,这是因为0只是日志文件的开始位置,并不是日志位置。实际上,MySQL知道的第一个事件的位置是4。 为了开始复制,你可以运行: mysql> START SLAVE; mysql> show slave status \G enjoy