Mysql实现主从复制
在开始教程之前,必须要先说说为什么要搞主从复制
线上环境,我们必须要对正式数据库的数据进行备份,保持备份数据库和正式库的数据实时一致
业务层面:业务量越来越大,对数据库的查询越来越高,数据库服务器的压力越来越大,此时通过堆硬件不是很好的解决方法,所以一般要做读写分离,及主库和从库数据实现实时复制,业务的处理在主库中进行,数据的查询在从库进行,通常,主从库的比例为1:7左右
再说下主从复制的原理
1. mysql数据库有个二进制日志文件,用来记录数据库所执行的sql语句
2. 我们需要做的就是把主库的日志文件拿过来,读取里面的内容,然后在从库中执行一次就可以实现保持数据库的数据一致
开始教程
1. 安装环境(mysql5.6)
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm rpm -ivh mysql-community-release-el7-5.noarch.rpm yum install mysql-community-server -y
2. 启动mysql服务并设置开机启动
# start是启动 stop是关闭 restart是重启 service mysqld start systemctl enable mysqld
3. 设置mysql的用户资料及密码,这块自己看着来就可以,记得要建立root账户及密码
mysql_secure_installation
4. 登录mysql并允许root用户远程登录
# 登录mysql mysql -uroot -p (这里执行后输入密码) # 下面这句话是赋权限,允许远程登录 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'yourpassword' WITH GRANT OPTION; # 刷新权限 flush privileges; # 执行完之后eit退出
5. 主库配置
vim /etc/my.cnf
增加以下配置(切记放在 [mysqld] 下面),配置完后重启mysql服务(service mysqld restart)
log-bin = mysql-bin binlog_format = mixed server-id =1 innodb-file-per-table =ON skip_name_resolve=ON
6. 重新登录mysql(如果你是从头开始安装的话,日志应该会有一条,我这里有3条)
show master logs;
查看主节点server id
查看二进制日志是否开启
然后这就是主库的配置,最后一步要记得关闭防火墙或者放行3306端口,主从库都要哦
放行命令
开端口命令:firewall-cmd --zone=public --add-port=3306/tcp --permanent 重启防火墙:systemctl restart firewalld.service
现在我们开始配置从库
安装过程都是一样的,主要是配置/etc/my.cnf,同样放[mysqld]下
relay-log=relay-log relay-log-index=relay-log.index server-id=12innodb_file_per_table=ON skip_name_resolve=ON
然后重启mysql,登录mysql
show global variables like '%log%';
执行以下命令,添加主库,信息要自己改一下,日志的名字和偏移量可以在主库上执行show master logs获取
CHANGE MASTER TO MASTER_HOST='192.168.71.129',MASTER_USER='root',MASTER_PASSWORD='root', MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=4323;
然后启动进程(复制日志的进程和执行sql的进行)
start slave
查看进程状态
如果是两个yes测试就可以了
注意:如果新建了数据库,需要stop slave,然后设置日志文件及偏移量之后start slave