Centos7虚拟机yum安装mysql实现主从复制案例教程
mysql安装
首先,centos 默认安装有MariaDB, 属于mysql 分支, 安装mysql 时会覆盖掉MariaDB
- 使用wget下载mysql 官方Repository
wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
2. 安装第一步下载的rpm文件
yum -y install mysql57-community-release-el7-10.noarch.rpm
3. 安装mysql 服务, 这一步需要花费一点时间
yum -y install mysql-community-server
下载依赖中, 耐心等待…
4. 启动mysql
systemctl start mysqld # 启动mysql
systemctl status mysqld # 查看mysql 状态
5. 至此mysql 安装成功, 但是mysql 安装好后 我们需要知道他的初始化密码, 修改密码之后才能正式操作mysql 数据库
grep "password" /var/log/mysqld.log # 产看mysql 初始化密码, root@localhost: 后面的就是初始化密码
6. 使用初始化密码登录mysql , 修改密码, 并授权其他机器可以链接mysql
mysql -u root -p # 使用默认密码登录mysql
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码'; # mysql 密码设置的时候会有强度校验 要求是 英文字母大小写, 特殊字符, 数字; 也可以修改密码校验强度(不建议修改, 养成习惯)指定比较简单的密码
7. 授权其他机器可以链接mysql
GRANT ALL PRIVILEGES ON . TO ‘root’@’%’ IDENTIFIED BY ‘密码’ WITH GRANT OPTION; # 授权命令 主要是授权其他机器 如navicat 等 以root账号 “Root@123” 密码链接数据库
FLUSH PRIVILEGES; #刷新授权
8. 推出重新启动关闭防火墙 , 就可以使用navicat 操作数据库了
navicat 链接mysql配置
MySQL 刚安装好, 使用navicat 链接可能会报错, 但基本上两种情况:
- 防火墙
解决方式是:粗暴的关掉防火墙
使用 systemctl status firewalld 查看防火墙的状态
使用 systemctl stop firewalld 暂时关闭防火墙
使用 systemctl disable firewalld 永久关闭防火墙- 未授权
GRANT ALL PRIVILEGES ON . TO ‘root’@’%’ IDENTIFIED BY ‘密码’ WITH GRANT OPTION; 授权其他机器登录
FLUSH PRIVILEGES; 刷新授权
主从复制
经过前面两部我们已经安装配置好数据库了, 接下来配置实现主从复制, 这里只准备了 192.168.171.111;192.168.171.112;两台虚拟机,实现一主一备(master-slave), 废话不多说, 开始…
角色 | 系统环境 | mysql版本 | ip |
---|---|---|---|
master | centos7 | mysql5.7 | 192.168.171.111 |
slave | centos7 | mysql5.7 | 192.168.171.112 |
- 首先来配置 192.168.171.111 主数据库, 授权从机登录用户,密码可以登录到主机
GRANT REPLICATION SLAVE ON *.* to 'user1'@'192.168.171.112' identified by 'Root@123'; # 授权从机登录用户名为 rep1,密码为 123,并且必须从
192.168.248.139这个地址登录,登录成功之后可以操作任意库中的任意表。其中,如果不需要限制登录地址,可以将 IP 地址更换为一个%
FLUSH PRIVILEGES; # 刷新授权
2. 配置 111 的/etc/my.cnf
server-id=111 // 唯一 一般ip最后一段
log-bin=mysql-bin // 开启binlog 日志
expire_logs_days= 7 // 过期清理时间
max_binlog_size= 100m // binlog每个日志文件大小
binlog_cache_size= 4m //binlog缓存大小
max_binlog_cache_size= 512m //最大binlog缓存大小
binlog-do-db=401_test // 需要同步的数据库名称
3. 进入数据库, 查看log_bin 是否开启成功
4. 使用 show master status\G 查看master 线程 信息 记录
File: mysql-bin.000001; // 日志名称
Position: 336; // 日志偏移量
Binlog_do_db:test; // 需要同步的数据库
- 在111, 112 上面分别创建数据库 test待用;
- 配置112 数据库 /etc/my.cnf
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-bin=mysql-bin // 二进制文件
binlog_format=mixed
server-id=112 // 服务id
replicate-do-db=test // 指定需要同步的数据库
7. 登录112数据库;开启同步操作命令
CHANGE MASTER TO
-> MASTER_HOST='192.168.171.111', // 主机ip
-> MASTER_USER='root', // 登录账号
-> MASTER_PASSWORD='Root@123', // 密码
-> MASTER_LOG_FILE='mysql-bin.000001',// 第四步记录的日志文件
-> MASTER_LOG_POS=120; // 第四步记录的日志偏移量
show slave status\G 查看slave 线程状态信息, 如果不对的话可以推出重启mysql 再试一下
如图代表数据主从配置成功
Slave_IO_Running为读取master的binaryLog的线程 Slave_SQL_Running为执行SQL的线程
- 效果展示:
拓展
- 这次主要讲述的是一主一从, 那么配置一主多从,只要在主机授权从机时不要指定具体的 ip地址 如下:
GRANT REPLICATION SLAVE ON *.* to 'root'@'%' identified by 'Root@123';
- 互为主从的搭建, 现在需要在 112上授权111 的访问, 同事在111上配置112一样的slave 线程配置即可
grant replication slave on *.* to 'root'@'192.168.171.111' identified by 'Root@123';
- 主从复制的原理
主从的需要:
1.防止单机故障
2.如果数据库突然宕机.会导致数据丢失.
3.为了防止数据丢失,要进行实时备份
主从的过程:
1.主库进行更新操作会实时的将sql 语句写到二进制日志文件中
2.从库的slave线程,实时的监听主库的二进制文件,如果主库的二进制文件发送了改变,同步改变的二进制文件.
3.通过slave线程将读取的二进制文件写入到中继日志中.
4.Sql线程实时读取中继日志中的sql语句, 写入到slave 库中,实现数据同步。
图如: