Advertisement

mysql5.7 安装及互为主从部署

阅读量:

安装

环境说明: centos7.6
myslq版本: mysql5.7
迅雷或者wget下载(别问我为啥用迅雷,因为快)

复制代码
    cd /usr/local/src
    wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar
    mkdir -p /usr/local/mysql5.7 && cd /usr/local/mysql5.7
    tar -xvf mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar -C /usr/local/mysql5.7
    
    
      
      
      
      
    
    AI写代码

卸载自带的mariadb

复制代码
    rpm -qa|grep mariadb
    yum -y remove mariadb-libs
    
    
      
      
    
    AI写代码

由于依赖关系,请按以下顺序执行安装

复制代码
    rpm -ivh mysql-community-common-5.7.26-1.el7.x86_64.rpm
    rpm -ivh mysql-community-libs-5.7.26-1.el7.x86_64.rpm
    rpm -ivh mysql-community-libs-compat-5.7.26-1.el7.x86_64.rpm
    rpm -ivh mysql-community-client-5.7.26-1.el7.x86_64.rpm
    rpm -ivh mysql-community-server-5.7.26-1.el7.x86_64.rpm
    
    
      
      
      
      
      
    
    AI写代码

启动mysqld 并设置开机启动

复制代码
    systemctl start mysqld
    systemctl enable mysqld
    systemctl status mysqld
    
    
      
      
      
    
    AI写代码

从日志文件查找临时密码

复制代码
    grep "password" /var/log/mysqld.log 
    
    
      
    
    AI写代码

登录

复制代码
    mysql -uroot -p"zS+u&ro49wbo"
    
    
      
    
    AI写代码

修改root的密码

复制代码
    alter user 'root'@'localhost' identified by 'root1234ABCD!@#$';
    
    
      
    
    AI写代码

测试是否修改成功

复制代码
    mysql -uroot -proot1234ABCD\!\@\#\$
    
    
      
    
    AI写代码

在这里插入图片描述
这是默认的密码复杂度及长度限制。我们修改一下,不然每次敲密码要死人。。。测试使用,可以这么干,生产还是保持默认的好点。。
在这里插入图片描述

复制代码
    set global validate_password_policy=0;  
    set global validate_password_length=1;
    set password for root@localhost=password('123456');
    flush privileges;
    
    
      
      
      
      
    
    AI写代码

也可以使用 mysql -uroot -p -S /var/lib/mysql/mysql.sock进行连接

互为主从搭建

当前两台机器时间不同步
在这里插入图片描述
先配置好ntp

复制代码
    yum install ntpdate -y
    
    
      
    
    AI写代码

然后开始同步阿里云的时间(两台都执行)

复制代码
    ntpdate ntp1.aliyun.com
    
    
      
    
    AI写代码

在这里插入图片描述
为了防止以后时间又不一致,设置定时同步时间的任务

复制代码
    echo "*/10 * * * * /usr/sbin/ntpdate ntp1.aliyun.com > /dev/null 2>&1" >> /var/spool/cron/root
    crontab -l
    
    
      
      
    
    AI写代码

在这里插入图片描述
在没有配置前mysql目录是这样的
在这里插入图片描述
开始配置配置文件
vim /etc/my.cnf
添加如下内容

复制代码
    character-set-server = utf8mb4 //设置字符集
    log-bin=mysql-bin //开启二进制日志
    server-id=1 //mysql的id 两个实例要不同
    relay_log=relaylogs
    
    
      
      
      
      
    
    AI写代码

重新启动mysql

复制代码
    systemctl restart mysqld
    
    
      
    
    AI写代码

重启以后可以看到已经有bin-log日志产生了
在这里插入图片描述
并且设置的server_id 也生效了
在这里插入图片描述
创建主从同步的账号(两个实例都添加,因为要互为主从)

复制代码
    grant all on *.* to 'zhucong'@'192.168.1.%' identified by '123456';
    flush privileges;
    
    
      
      
    
    AI写代码

初始化bin-log日志

复制代码
    reset master;
    show master status;
    
    
      
      
    
    AI写代码
在这里插入图片描述
开始设置主从同步

先把1.121作为主,1.122作为从
在1.122机器上执行

复制代码
    change master to master_host='192.168.1.121',master_user='zhucong',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=154;
    
    
      
    
    AI写代码

这里的master_host是指主机B的ip地址,master_uesr是执行同步操作的用户名,master_password是执行同步的用户密码,master_log_file是主机B的bin-log日志,master_log_pos是从bin-log日志开始同步的位置。
开启同步:
mysql> start slave;
查看同步设置是否成功:
在这里插入图片描述
在这里插入图片描述
查看从库状态,主从同步正常
在这里插入图片描述
master上看不到slave信息,因为它是主。还没有互为主从。
在这里插入图片描述
验证一下主从功能是否正常
在这里插入图片描述
可以看到主库做的操作,自动就同步过去了。

把主作为从,从作为主

第一步主从搭好了,接着就是把主作为从,从作为主。这样就实现了互为主从的关系。
其实操作也是一样的。改一下参数而已

在主(1.121)上执行以下语句,在执行之前先在1.122上执行show master status\G;确认一下。1.122的log position位置和bin-log文件名

复制代码
    change master to master_host='192.168.1.122',master_user='zhucong',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=154;
    start slave;
    
    
      
      
    
    AI写代码

执行完了以后,两边都执行show slave status \G; 可以看到两边都互为主从了。
在这里插入图片描述
可以通过下面命令查看binlog日志事件

复制代码
    show binlog events;
    
    
      
    
    AI写代码

从下面的截图可以看出。在任何一边执行的语句在binlog并没有写到另一边的binlog日志里面去。只有在执行的当前的机器上有记录。(原因是主从是通过中继日志来进行复制执行的)
在这里插入图片描述
在生产上,为了避免两个库一起写,一般会把备库作为只读库。接下来就修改备库只读。
因为是互为主从,随便修改那个都可以。我这边就修改1.122作为只读把。
在1.122上执行下面语句,就设为只读了,当然也可以直接设置mysql配置文件,但是由于生产会存在切换和重启,干脆配置文件就不写了。免得要手工去改配置文件,直接在发生故障切换的时候。命令行修改更方便

复制代码
    set global read_only=1; 
    
    
      
    
    AI写代码

使用show global variables like "%read_only%"; 可以查看到设置是否成功。
在这里插入图片描述
注意:set global read_only=1 对拥有super权限的账号是不生效的,所以在授权账号的时候尽量避免添加super权限

其他方面:

那么我们在做数据迁移的时候不想发生任何数据的修改,包括super权限修改也要限制。
可以使用锁表功能:

复制代码
    flush tables with read lock;
    
    
      
    
    AI写代码

验证如下
在这里插入图片描述

开启使用gtid

  1. 在配置文件里面添加如下配置
    vim /etc/my.cnf
复制代码
    gtid_mode = on
    enforce_gtid_consistency = 1 
    
    
      
      
    
    AI写代码
  1. 重启mysql,并设置Auto_Position
复制代码
    systemctl restart mysqld
    
    
      
    
    AI写代码

登录并设置如下

复制代码
    stop slave;
    change master to master_auto_position=1;
    start slave;
    
    
      
      
      
    
    AI写代码

在这里插入图片描述
效果如下
在这里插入图片描述

全部评论 (0)

还没有任何评论哟~