Dai Chong's blog

引言

本文介绍的是在虚拟机上搭建,实际情况其实和真正的线上环境一毛一样,使用的系统是Centos 7。

什么是主从复制?原理是什么?

答:简单点理解,主从复制其实就是两个数据库数据的项目备份过程。其原理就是主库产生的操作都会生成binlog传入从库,从库通过I/O线程把binlog写入relaylog,然后从库创建I/O线程执行relaylog进行数据备份。

流程图

为什么要做主从复制?

答:一方面是为了备份数据,防止数据丢失和破坏,另一方面是为读写分离做铺垫。

搭建步骤

新建虚拟机

首先在本地安装虚拟机,我个人比较推荐 VMware Workstation Pro,当然也可以是使用其他的。
虚拟机的安装就不做介绍了,无非都是下一步下一步。安装好之后在需要下载对用的系统镜像,因为本文主要是在Centos上做演示,所以我就下载了Centos的镜像,但是无法分享给大家,因为太大了,足足4G

安装好之后新建两个虚拟机(怎么新建虚拟机就不做介绍了):

安装mysql

注意:尽量两个虚拟机上的mysql版本保持一直,避免出现不可预知的错误。
我安装的版本是5.7.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 进入
cd /usr/local/src
# 下载rpm包
wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
# 安装rpm
rpm -ivh mysql57-community-release-el7-11.noarch.rpm
# 安装 mysql-server
yum install -y mysql-server
# 启动
systemctl start mysqld
# 设置开机自启
systemctl enable mysqld
# 登陆mysql
mysql -uroot -p

因为5.7之后的版本都是禁止匿名登陆的,你可以通过查看密码并登陆,然后修改密码,或者直接修改my.cnf来禁止登陆验证。

1
cat /var/log/mysqld.log|grep 'A temporary password'

因为系统给我的默认密码含有一些特殊符号,我没法输入,我只能使用第二种方法:

1
2
3
4
5
6
7
8
9
10
vi \etc\my.cnf
# 在最后增加一行
skip-grant-tables=1
# 登陆mysql,刷新权限
flush privileges;
# 修改密码
use mysql;
update user set password='password' where user='root';
# 修改成功后再次刷新权限
# 最后重启一下mysql服务

本地连接虚拟机上的mysql
1
2
3
# 查看IP
ifconfig
# 在本地Cmd中ping这个IP
使用telnet测试mysql连接状态
1
telnet 192.168.22.130 3360
错误的情况(因我这里是好的,所以我把3306填成了3360)
检查虚拟机是否安装了iptables
1
2
3
4
5
6
7
8
9
# 关闭防火墙
systemctl stop firewalld
# 禁止防火墙
systemctl mask firewalld
# 禁止开机启动
systemctl disable firewalld
# 如果实在不行,还要把selinux关闭
vi /etc/selinux/config
SELINUX=disabled

再次使用telnet 192.168.22.130 3306还是报错上边图片所示时。

配置权限
1
2
3
4
5
# 创建一个用户
GRANT ALL PRIVILEGES ON *.* TO 'daichong'@'%' IDENTIFIED BY 'daichong' WITH GRANT OPTION;
# 刷新权限
FLUSH PRIVILEGES;
# 这里注意真实线上情况权限不能这么开

出现这个说明已经成功了

使用navicat连接

到这里基础的安装已经完成了,如果遇到问题可在评论中提问,下一篇介绍主从复制如何配置。


 评论