美文网首页程序员
mysql5.7.21安装和主从同步

mysql5.7.21安装和主从同步

作者: 格子Lin | 来源:发表于2018-02-07 20:11 被阅读0次

    本篇博客带来Mysql5.7.21的安装和主从复制配置。
    转载请注明出处 http://blog.lzoro.com

    mysql

    碎碎念

    惯例碎碎念。

    很久之前就做过mysql的部分应用架构,包括主从复制和集群等,一直没有形成博客记录下来,虽然网上也有很多的相关资料,但是出于加深记忆,还是把自己的操作步骤和截图一步步记录下来,回头忘了也可以回顾,当然,也希望有小伙伴能得到帮助。

    环境

    一台装有vsphere6.5的宿主机,和宿主机上的centos虚拟机若干。

    1、vsphere 6.5
    2、centos 7
    3、mysql 5.7
    4、navicat 8 
    5、windows 10
    

    安装mysql

    1、yum方式安装
    # 进入文件夹
    cd /usr/local
    # 创建你自己的文件夹
    mkdir zoro zoro/setup
    # 进入创建的文件夹
    cd zoro/setup
    # 下载官方yum源包
    wget https://repo.mysql.com//mysql57-community-release-el7-11.noarch.rpm
    # 赋予执行权限
    chmod +x mysql57-community-release-el7-11.noarch.rpm
    # 本地安装,一路Y就行了
    yum localinstall mysql57-community-release-el7-11.noarch.rpm
    # 启动
    systemctl start mysqld
    # 获取临时密码
    grep 'temporary password' /var/log/mysqld.log
    # 登录mysql
    mysql -uroot -pYourPwd
    # 修改密码 OR 配置等,你想干嘛就干嘛
    
    wget下载 赋予执行权 本地安装 验证本地安装 安装1 安装2 获取临时密码
    2、二进制安装
    # 进入文件夹
    cd /usr/local
    # 创建你自己的文件夹
    mkdir zoro zoro/setup
    # 进入创建的文件夹
    cd zoro/setup
    # 下载二级制包,地址二选一
    
    # 官网镜像,跟乌龟似的
    wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.21-linux-glibc2.12-x86_64.tar.gz
    # 国内镜像,速度杠杠的
    wget http://mirrors.ustc.edu.cn/mysql-ftp/Downloads/MySQL-5.7/mysql-5.7.21-linux-glibc2.12-x86_64.tar.gz
    
    # 解压缩
    tar zxvf mysql-5.7.21-linux-glibc2.12-x86_64.tar.gz
    
    # 移动并重命名到指定地方,需要先创建目录
    mkdir /usr/local/server
    mv mysql-5.7.21-linux-glibc2.12-x86_64 /usr/local/server/mysql
    # 进入mysql 目录
    cd /usr/local/server/mysql
    # 创建data目录
    mkdir /data /data/db /data/db/mysql
    # 检查和创建用户
    cat /etc/group | grep mysql
    # 如过查无结果,则创建mysql用户
    groupadd mysql
    useradd -r -g mysql mysql 
    #科普1:-g, --gid GROUP    新账户主组的名称或 ID
    #科普2:-r, --system       创建一个系统账户,不可用于登录
    
    # 赋权
    chown -R mysql:mysql /data/db/mysql
    chmod 750 /data/db/mysql
    
    # 执行安装
    ./bin/mysqld --initialize --user=mysql --basedir=/usr/local/server/mysql --datadir=/data/db/mysql
    
    # 记录屏幕中的临时密码
    A temporary password is generated for root@localhost: >wmujowe!68H
    
    # 如果basedir和datadir修改过,需要先修改./support-files/mysql.server
    vim ./support-files/mysql.server
    #填入
    basedir=/usr/local/server/mysql
    datadir=/data/db/mysql
    
    # 复制服务脚本
    cp -a ./support-files/mysql.server /etc/init.d/mysqld
    
    # 编辑配置文件,将data目录等参数修正
    
    # 1、如果以下两个目录不在上面赋权的范围内,也要重新赋权,否则无法启动
    log-error=/var/log/mysql/mariadb.log
    pid-file=/var/run/mysql/mariadb.pid
    
    chown -R mysql:mysql /var/log/mysql
    
    # 2、配置文件加入[mysql]节点,用以客户端连接
    [mysql]
    socket=/data/db/mysql/mysql.sock
    
    # 加入环境变量
    export PATH=$PATH:/usr/local/server/mysql/bin
    
    # 启动mysql
    service mysqld start
    
    # 接下来的步骤就和yum方式类似了,不再赘述
    mysql -uroot -pYouPwd
    ...
    
    
    下载二进制包 安装
    3、其他说明

    除了上述两种方式外,还有源码安装等方式,如有兴趣,请自行研究。

    yum方式安装相对来说比较省事,但是由于下载镜像在国外,一般速度较慢,如果不能接受的话建议采用其他方式。

    二进制安装稍微繁琐一点,建议有Linux经验的小伙伴采用。

    Tips

    ①修改密码
    提供关于修改密码的命令

    # 登录
    mysql -uroot -pYourPwd
    
    # 第一种方式
    >set password=password("YourNewPwd");
    
    # 第二种方式
    >use mysql;
    >update user set authentication_string=password("YourNewPwd") where User='root';
    

    ②移动data目录
    默认的mysqldata目录在于/var/lib/mysql,如果需要移动目录,可以参考下列操作

    # 关闭mysql
    systemctl stop mysqld
    
    # 创建你自己的目录 
    mkdir /data/db
    
    # 移动mysql文件夹
    mv /var/lib/mysql /data/db
    
    # 更改权限
    chown -R mysql:mysql /data/db/mysql
    
    # 启动mysql 
    sysctemctl start mysqld
    
    # 如果遇到启动问题,一般先检查配置文件是否有错
    
    # 如果确认配置文件没错,还启动不了,可以尝试下面的设置
    vim /etc/selinux/config
    # 设置 SELINUX=disabled
    # 保存重启
    reboot
    # 再次尝试启动mysql
    sysctemctl start mysqld
    
    Tips:
    关于selinux这里不做赘述,有兴趣的可以去查阅资料了解
    

    ④创建用户和赋权
    提供关于创建用户和赋权的基础命令,如需了解详细内容,请参考官网

    Create user ‘user’@’host’ identified by ‘YourPwd’;
    # 赋予权限(原则上是最小权限赋予,此处赋予db.tables的全部权限)
    Grant all on db.tables to user;
    flush privileges;
    

    ⑤防火墙开放端口
    如果你开启了防火墙,需要开放默认的3306端口,否则外网无法访问

    # 查看防火墙状态
    systemctl status firewalld
    
    # 如果防火墙开启,需要开放3306端口
    firewall-cmd --zone=public --add-port=3306/tcp --permanent
    
    # 重启防火墙
    systemctl restart firewalld
    

    主从配置

    前提条件,分别在两台服务器上安装msyql服务

    IP :192.168.1.246(centOS7 + mysql) master
    IP : 192.168.1.249(centOS7 + mysql) slave
    
    
    1、master配置

    这里不区分库,针对所有的库都做主从复制,如果需要特定库做主从复制的,请翻阅4、其他说明

    vim /etc/my.cnf

    log-bin=mysql-bin
    server-id=246
    log_bin_trust_function_creators=1
    

    重启mysql,并登陆mysql进行操作

    systemctl restart mysqld
    
    mysql -uroot -pYourPwd
    
    #创建同步账号,赋予权限,这里进行演示,不做权限限制和ip限制,请知悉
    mysql>GRANT FILE ON *.* TO 'slave'@'%' IDENTIFIED BY 'YourSlavePwd';
    mysql>GRANT replication slave on *.* to ’slave’@’%’ identified by 'YourSlavePwd'
    mysql>flush privileges;
    #查看主服务器状态,并记录下状态
    mysql> show master status;
    
    2、slave配置

    vim /etc/my.cnf

    read_only=1
    log-bin=mysql-bin
    server-id=249
    log_bin_trust_function_creators=1
    

    重启mysql,并登陆mysql进行操作

    systemctl restart mysqld
    
    mysql -uroot -pYourPwd
    
    # 配置master,并开启同步
    mysql> change master to master_host='192.168.1.246',master_user='slave',master_password='YourSlavePwd', master_log_file='mysql-bin.000033',master_log_pos=57883;
    # 开启同步
    mysql> start slave;
    # 查看同步状态
    mysql> show slave status\G;
    
    # 如果出现以下两个Yes,证明同步成功,如果出现问题,请翻阅`4、其他说明`
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    
    3、验证
    1、用Navicat分别连接主库和从库
    
    2、在主库对某些记录进行修改
    
    3、查看从库是否同步了主库的修改
    
    4、其他说明

    这里分成两部分,一部分针对主从复制中,只要求同步部分库的配置,另一部分记录主从不同步的解决方法。

    ①部分同步

    需要修改my.cnf的配置文件,包括replicate-ignore-dbreplicate-ignore-db以及binlog-do-dbbinlog-ignore-db等参数配合。

    具体配置说明请参考这里

    ②主从不同步解决

    一、忽略错误后,继续同步。(该方法适用于主从库数据相差不大,或者要求数据可以不完全统一的情况,数据要求不严格的情况。)
    
    1)、停止同步
    mysql>stop slave;
    2)、设置参数
    mysql>set global sql_slave_skip_counter =1;
    3)、启动同步并查看
    start slave;
    mysql> show slave status\G; 
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    
    二、重新做主从,完全同步。(该方法适用于主从库数据相差较大,或者要求数据完全统一的情况。)
    
    1)、进入主库,进行锁表,防止数据写入。注意:该处是锁定为只读状态,语句不区分大小写
    mysql> flush tables with read lock;
    2)、进行数据备份并解锁
    mysqldump -uroot -pYouPwd YourDB > bak.sql;
    mysql> UNLOCK TABLES;
    3)、查看master 状态并记录
    mysql> show master status;
    4)、把mysql备份文件传到从库机器,进行数据恢复
    5)、停止从库的状态
    mysql> stop slave;
    6)、从库执行mysql命令,导入数据备份
    7)、设置从库同步,具体参数请根据master status填写
    change master to master_host = '192.168.1.246', master_user = 'slave', master_port=3306, master_password='YourSalvePwd', master_log_file = 'mysqld-bin.000035', master_log_pos=120;
    8)、重新开启从同步
    mysql> start slave;
    9)、查看同步状态
    mysql> show slave status\G;
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    
    

    写在最后

    本来本篇也打算加入读写分离的内容,由于篇幅太长,综合考虑,准备另开一篇博客。

    路过的小伙伴,点个喜欢呗,十分感谢。

    参考

    Mysql官方文档 - yum安装
    Mysql官方文档 - bin安装

    相关文章

      网友评论

        本文标题:mysql5.7.21安装和主从同步

        本文链接:https://www.haomeiwen.com/subject/cveazxtx.html