Centos7搭建主从库

目录

一、为什么要做主从数据库?

二、操作步骤

1.创建两个虚拟机

2.安装MySQL

3.修改配置

4.MySQL配置主从

结语


此文章仅提供本人记录使用,全程按照本人实际自己挖坑、踩坑、跳坑、躺平步骤演示

最近时间开始学习主从库搭建,但本人技术实在受限,又苦于无良师。看似在别人眼里很简单的事情,愣是把该遇到的、不该遇到的错误全犯了一遍。此文章仅为了自己温故,如若幸运,更希望有大佬指点一二,不胜感激。当然,能帮助到别人哪怕有个二三启示再好不过。


提示:以下是本篇文章正文内容,下面案例可供参考

一、为什么要做主从数据库?

个人简单式理解:

        1.非常不错的容灾机制。

        2.降低磁盘I/O访问的频率。

        3.读写分离,更优秀的并发性能。

        4.负载均衡。

        5.充分发挥各种引擎优点。

二、操作步骤

1.创建两个虚拟机

        本人使用的Centos7镜像,闲话少说,本人对着VMware虚拟机就是下一步下一步,此处本人乱点一通,就不在此做赘述。如果有需要步骤的朋友可以留言,本人可单独做一篇文章予以讲解虚拟机创建。

     

         这里创建了两个虚拟机:

                master: 用于主库操作 ip为:192.168.40.131

                slave:用于从库操作 ip为:192.168.40.132

2.安装MySQL

1.下载MySQL安装包

wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

           此时ls查看目录已下载好mysql57-community-release-el7-11.noarch.rpm

2.安装MySQL源

yum -y localinstall mysql57-community-release-el7-11.noarch.rpm

        这里会有时抛出一个小问题:

执行rm -r -f /var/run/yum.pid 后重新执行即可

3.安装MySQL

yum -y install mysql-community-server

        安装失败:mysql-community-client-5.7.39-1.el7.x86_64.rpm 的公钥尚未安装

4.跳过秘钥检查

vim /etc/yum.repos.d/mysql-community.repo

        找到MySQL 5.7修改gpgcheck=1改为gpgcheck=0后再次执行安装MySQL命令,安装成功!

5.启动MySQL,设置为开机自启

systemctl start mysqld

systemctl enable mysqld

systemctl daemon-reload

6.查看MySQL生成临时root初始密码

vim /var/log/mysqld.log

        有时候特殊符号不能识别,此时解决方法:

vim /etc/my.cnf 

#加入skip-grant-table  跳过MySQL密码验证

systemctl restart mysqld  #重启MySQL后登录

mysql -uroot -p  #输入密码时直接回车

#设置新密码

update mysql.user set authentication_string=password('123456') where user = 'root';

exit;

#退出后,去掉在MySQL配置文件中的skip-grant-table,保存后重启MySQL

7.使用ALTER USER语句重置密码,并设置远程访问

        注意:需要先使用ALTER USER 修改密码。后才能使用MYSQL。

mysql> alter user 'root'@'localhost' identified by '123456';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

        密码不符合当前的策略要求,执行

#降低设置密码的验证强度等级

set global validate_password_policy=LOW;

#设置6位密码

set global validate_password_length=6;

        再次执行

alter user 'root'@'localhost' identified by '123456';

#设置远程登录

grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;

8.在虚拟机中开启防火墙

千万别忘记,重载防火墙,另其生效

此时,可以使用Navicat进行连接

 此时,master主库MySQL安装完成,同理需要把slave从库的MySQL安装完成,再此不进行赘

3.修改配置

vim /etc/my.cnf

# <---     主库    ---->
# 节点ID,确保唯一
server-id = 1
#开启mysql的binlog日志功能
log-bin = mysql-bin
#控制数据库的binlog刷到磁盘上去 , 0 不控制,性能最好,1每次事物提交都会刷到日志文件中,性能最差,最安全     
sync_binlog = 1    
#binlog日志格式,mysql默认采用statement,建议使用mixed     
binlog_format = mixed  
#binlog过期清理时间
expire_logs_days = 7
#binlog每个日志文件大小                          
max_binlog_size = 100m
#binlog缓存大小                    
binlog_cache_size = 4m   
#最大binlog缓存大                     
max_binlog_cache_size= 512m
#不生成日志文件的数据库,多个忽略数据库可以用逗号拼接,或者 复制这句话,写多行              
binlog-ignore-db=mysql
 
# 自增值的偏移量
auto-increment-offset = 1
# 自增值的自增量    
auto-increment-increment = 1
#跳过从库错误  
slave-skip-errors = all


#  <------    从库    ------>

server-id = 2
log-bin=mysql-bin
relay-log = mysql-relay-bin
#忽略规则
replicate-wild-ignore-table=mysql.%
replicate-wild-ignore-table=information_schema.%

分别配置后进行重启另其生效 systemctl restart mysqld

4.MySQL配置主从

      Master数据库:

        1.创建用户,并予以授权

create user stone_user identified by '123456'; 

#如果执行有密码验证规则执行

set global validate_password_policy=LOW;

set global validate_password_length=6;

#赋予新用户权限

grant replication slave on *.* to 'stone_user'@'192.168.40.131' identified by '123456';

#刷新

flush privileges;

        2.查看状态

show master status;

#执行结果

+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      859 |              | mysql            |                   |
+------------------+----------+--------------+------------------+-------------------+

 in set (0.00 sec)

个人理解:mysql-bin.000001中记录mysql执行变化,并记录在此日志文件中,当859代表执行偏移量,从库以此进行监听偏移量是否有变动,当发生变化时进行更新。

      Slave数据库:

         1.创建关联

CHANGE MASTER TO  
MASTER_HOST = '192.168.40.131',       #主库ip
MASTER_USER = 'stone_user',           #主库用户  
MASTER_PASSWORD = '123456',           #主库密码
MASTER_PORT = 3306,                   #端口号
MASTER_LOG_FILE='mysql-bin.000001',   #主库日志文件
MASTER_LOG_POS=859;                   #主库日志文件偏移量

        2.启动从库slave

#启动

start slave;

#关闭

stop slave;

         3.查看状态

 show slave status\G

 好,此时新的风暴已经出现,MySQL主从同步失败:Slave_IO_Running:Connecting

出现这个问题原因大致分为:

        1.网络不咋地 (我家WiFi挺猛的)

        2.防火墙木开启 (Navicat测试连接没毛病)

        3.mysql主从配置文件有毛病 (配置文件基本没配置额外项)

        4.配置连接语法有毛病 (详细检查了木毛病)

        5.主机未开放账户连接权限 (看来是他了!!!)

查看新建用户stone_user权限(主库Master):

        select host,user,grant_priv,super_priv from mysql.user

#添加权限
update mysql.user set grant_priv = 'Y',super_priv='Y' where user = 'stone_user';

#查看复制账户是否拥有REPLICATION CLIENT、REPLICATION SLAVE、SUPER、RELOAD权限
grant REPLICATION CLIENT ON *.* TO stone_user;
grant REPLICATION SLAVE ON *.* TO stone_user;
grant SUPER ON *.* TO stone_user;
grant reload on *.* to stone_user;

#刷新
flush privileges;

重启MySQL,一定要重启

此时,再次查看从库,执行

show slave status\G

 终于在我的努力下,离成功越来越远了......

在Master数据库中:

show master status; #重新查看

因为不断弄bug进行重演过程中,每次重启mysql会新生成一个mysql-bin文件导致与从库不匹配。

在Slave数据库中:

stop slave;

CHANGE MASTER TO 
MASTER_HOST = '192.168.40.131',  
MASTER_USER = 'stone_user', 
MASTER_PASSWORD = '123456',
MASTER_PORT = 3306,
MASTER_LOG_FILE='mysql-bin.000006',
MASTER_LOG_POS=154,
MASTER_RETRY_COUNT = 60,
MASTER_HEARTBEAT_PERIOD = 10000; 

start slave;

 成功!!!现在,我们在master数据库中新建数据库,加入数据进行测试:

主库:

 从库:

 完活!!!


结语

有一个大佬和我说过:心态也是成神之路的必修课,努力是做给自己看的 不是做给别人看的

为此,我将不留余地的向前奔跑,也希望有兴趣的朋友能一起相互学习,共同努力。第一次发文如有不足,请多多包含多多指教。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值