• Linux安装mysql数据库并实现主从搭建


    一.环境说明

    【环境说明】:
    192.168.110.161 mysql-master  ##网络配置到位,防火墙关闭,selinux关闭
    192.168.110.162 mysql-slave   ##网络配置到位,防火墙关闭,selinux关闭

    两台主机,操作系统是centos7,提前网络配置好,关闭防火墙,selinux,修改主机名

    二.【YUM配置】

    本次建议使用操作系统镜像做yum源,具体方法如下

    1.创建操作系统ISO镜像的挂载目录,并挂载

    mkdir /mnt/yllyum
    mount /dev/cdrom /mnt/zijian-yum

    2.进入yum的目前做备份,并创建自建的yum源的文件

    cd /etc/yum.repos.d/
    mkdir bak
    mv * bak 

    #自建yum的文件

    cat >zijian-yum.repo < [base]
    name=CentOS-$releasever - Base
    baseurl=file:///mnt/zijian-yum
    enable=1
    gpgcheck=0
    gpgkey=file:///mnt/zijian-yum/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
    EOF

    yum clean all
    yum makecache

    三.【mysql安装】 

    1.清理老的mysql

    (1)卸载已有的mysql
          查找以前是否装有mysql命令:rpm -qa|grep -i mysql
          停止mysql服务,卸载之前安装的mysql: rpm -ev 包名
          如果卸载过程中报依赖错误,直接在卸载命名后面加参数 --nodeps
          rpm -ev 包名 --nodeps
    (2)查找之前老版本mysql的文件并删除老版本mysql的文件

    2.安装前的准备

    安装mysql之前需要确保系统中有libaio依赖

    yum search libaio
    yum install libaio -

     3.下载mysql软件包

    1. mkdir /u01/
    2. cd /u01/
    3. mkdir soft
    4. cd soft

    下载并上传文件mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz到soft目录下

    5.解压软件包

    1. #解压
    2. tar -xvf mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz
    3. #重命名文件夹
    4. mv mysql-8.0.33-linux-glibc2.12-x86_64 ../mysql8 

    3)、安装
    (1)添加用户和组

    1. #添加用户组
    2. groupadd mysql
    3. #添加用户mysql 到用户组mysql(使用-r参数表示mysql用户是一个系统用户,不能登录) --已有,不操作
    4. useradd -r -g mysql mysql
    5. #添加完用下面命令测试,能看到mysql用户的信息
    6. id mysql

    (2)手动创建MySQL data目录

    1. cd /u01/mysql8
    2. mkdir data
    3. mkdir log
    4. mkdir run
    5. touch /u01/mysql8/log/mysql8.log

    (3)目录权限设置

    1. #将mysql及其下所有的目录所有者和组均设为mysql
    2. chown -R mysql:mysql /u01/mysql8/
    3. #查看是否设置成功,执行下面命令,可以看到文件的所有者和组都变成了mysql
    4. cd /u01/mysql8
    5. ll

    (4)配置my.cnf文件----此文件非常重要,初始化之前要把此文件放到 /etc 目录下,或者把老文件备份一下(升级失败还能用老MySQL)
    ##rm -rf /etc/my.cnf编辑新文件
    vi /etc/my.cnf
    #此文件内容如下(路径根据自己的实际情况):

    1. [client]
    2. port = 13306
    3. socket = /tmp/mysql.sock
    4. [mysqld_safe]
    5. log-error=/u01/mysql8/log/mysql8.log
    6. pid-file=/u01/mysql8/run/mysql8.pid
    7. [mysqld]
    8. port = 13306
    9. init-connect='SET NAMES utf8mb4'     #连接时执行的SQL
    10. basedir=/u01/mysql8           #根据自己的安装目录填写
    11. datadir=/u01/mysql8/data       #根据自己的mysql数据目录填写
    12. socket=/tmp/mysql.sock                
    13. max_connections=200                   #允许最大连接数
    14. max_connect_errors = 30               #最大连接错误次数
    15. character-set-server=utf8mb4         #服务端使用的字符集默认为8比特编码的latin1字符集
    16. default-storage-engine=INNODB         #创建新表时将使用的默认存储引擎
    17. skip-character-set-client-handshake   #忽略应用程序想要设置的其他字符集
    18. ###sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES #sql模式
    19.  
    20. net_read_timeout = 120               #在中止读取之前等待来自连接的更多数据的秒数
    21. net_write_timeout = 900               #在中止写入之前等待块写入连接的秒数
    22. max_allowed_packet = 500M             #在一次传送数据包的过程当中最大允许的数据包大小
    23. wait_timeout=1800                     #请求的最大连接时间
    24. interactive_timeout=1800             #和上一参数同时修改才会生效
    25.  
    26. ###记录慢SQL
    27. slow_query_log=1
    28. long_query_time = 10
    29. slow_query_log_file=slow-query.log

    (5)初始化mysql数据库

    1. /u01/mysql8/bin/mysqld --initialize-insecure --user=mysql --basedir=/u01/mysql8 --datadir=/u01/mysql8/data
    2. #注意:mysqld --initialize-insecure初始化后的mysql是没有密码的

    (6)mysqld_safe启动mysql(临时启动)

    /u01/mysql8/bin/mysqld_safe --user=mysql &

    (7)修改密码,调整用户

    #登录数据库,无密码

    1. cd /u01/mysql8/bin/
    2. ./mysql -u root -p # 默认没有密码,直接敲回车就可以

    [注]:没有可以不管
    --报错
    [root@ol8_mysql8_master bin]# ./mysql -u root -p
    ./mysql: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory
    --解决
    ln -s /usr/lib64/libtinfo.so.6.1 /usr/lib64/libtinfo.so.5

    #修改数据库登录密码

    1. #设置外网可以访问
    2. 在mysql的bin目录下执行:mysql -uroot -p密码 登陆到数据:
    3. 执行:use mysql;
    4. 执行:select host,user from user;
    5. 可以看到user为root,host为localhost的话,说明mysql只允许本机连接,那么外网,本地软件客户端就无法连接了。
    6. 调整方法:
    7. 执行:update user set host='%' where user ='root';
    8. 执行刷新:flush privileges;
    9. use mysql;
    10. ALTER USER 'root'@'%' IDENTIFIED BY 'Htjs_JS_2023';
    11. flush privileges;
    12. exit;

    (8)测试登录

    1. cd /u01/mysql8/bin/
    2. ./mysql -u root -p
    3. 输入密码后,应该就连接上了
    4. show databases;
    5. exit; #退出

    (9)copy启动脚本并将其添加到服务且设置为开机启动,之前已经有的统统备份,统统移走
    #mysql启动脚本为:/u01/mysql8/support-files/mysql.server

    cp /u01/mysql8/support-files/mysql.server /etc/init.d/mysqld


    #添加服务并设置开机启动

    1. #添加系统服务
    2. chkconfig --del mysqld
    3. chkconfig --add mysqld
    4. # 显示服务列表
    5. chkconfig --list
    6. # 开机启动
    7. chkconfig --level 345 mysqld on

    # 测试添加的服务是否能用
    因为之前已经通过mysqld_safe启动mysql,因此需要先停掉进程,需要删除守护进程

    1. ps -ef|grep mysqld 
    2. kill -9 进程号

    启动数据库服务

    1. [Linux6]
    2. service mysqld status #查看状态
    3. service mysqld start #启动mysql服务
    4. service mysqld stop #停止mysql服务
    5. [Linux7]
    6. systemctl status mysqld #查看状态
    7. systemctl start mysqld #启动mysql服务
    8. systemctl stop mysqld #停止mysql服务
    9. 如果还访问不了,那可能是防火墙问题,修改下防火墙就ok。


    4、配置mysql客户端命令快捷方式
    先删除老的

    1. rm -rf /bin/mysql
    2. rm -rf /bin/mysqldump

    --再增加新的快捷方式

    1. cp /u01/mysql8/bin/mysql /bin/mysql
    2. cp /u01/mysql8/bin/mysqldump /bin/mysqldump

    测试登录
    cd /
    mysql -u root -p

    输入密码后,应该就连接上了

    show databases;
    exit; #退出

    [可能出现的问题]:libcrypto.so.1.1: cannot open shared object file。
    [root@sc_12366_dzswj_l /]# mysql -u root -p
    mysql: error while loading shared libraries: libcrypto.so.1.1: cannot open shared object file: No such file or directory
    [解决1]:可以将OpenSSL进行升级,也可以用偷取取巧方法解决,还可以用直接复制所需要的lib文件解决,附上升级OpenSSL的方法
    1.zlib 
        tar -zxvf zlib-1.2.13.tar.gz
        cd zlib-1.2.13
        ./configure
        make && make install
    2.openssl 
        tar -zxvf openssl-1.1.1q.tar.gz
        cd openssl-1.1.1q
        ./config
        
        若报错Can't locate IPC/Cmd.pm in @IPC/Cmd
            yum install perl-IPC-Cmd
          若报错Operating system: x86_64-whatever-linux2
    You need Perl 5.
           yum install perl -y   
        make && make install
            不用专门加参数,默认在/usr/local/ssl
            
        cp libcrypto.so.1.1 /usr/local/lib
        cp libssl.so.1.1 /usr/local/lib
        cd /usr/local/lib
        ln -sf libcrypto.so.1.1 libcrypto.so.0
        ln -sf libcrypto.so.1.1 libcrypto.so
        ln -sf libssl.so.1.1 libssl.so.0
        ln -sf libssl.so.1.1 libssl.so
        ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
        ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
        
        验证
        openssl version
    [解决2]:
    先删除老的
    rm -rf /bin/mysql
    rm -rf /bin/mysqldump

    --或者投机取巧用软连接
    ln -s  /u01/mysql8/bin/mysql /bin/mysql
    ln -s  /u01/mysql8/bin/mysqldump /bin/mysqldump

    测试登录

    1. [测试登录]
    2. cd /
    3. mysql -u root -p
    4. 输入密码后,应该就连接上了
    5. show databases;
    6. exit; #退出

    【主从环境准备】

    1、mysql-master端关机,VMware克隆mysql-master端为mysql-slave端,并且启动mysql-slave端
    2、mysql-slave端修改IP
    3、mysql-slave端修改《auto.cnf》,修改为与主库不一致就行了
        /u01/mysql8/data/auto.cnf
    4、启动从节点,启动主节点

    【主从搭建】:
    1.配置mysql-master端
     1)、追加my.cnf配置

    1. server-id = 11
    2. log-bin = mysql-bin                   #打开二进制功能,MASTER主服务器必须打开此项
    3. expire_logs_days=15                   #日志过期时间
    4. max_binlog_size=1024M                 #binlog单文件最大值
    5. binlog-rows-query-log_events=1        #可以在binlog日志中看到语句的原始sql
    6. ?
    7. binlog-format=ROW
    8. ###binlog-row-p_w_picpath=minimal     #允许应用程序只能对行的镜像数据进行复制,而不在关心行是否已经进行了DML操作
    9. ?
    10. ###gtid模式关键参数
    11. gtid-mode=on
    12. enforce-gtid-consistency=true
    13. log-slave-updates=true #从库做为其他从库的主库时用
    14. master-info-repository=TABLE
    15. relay-log-info-repository=TABLE

     2)、重启MySQL服务

    systemctl restart mysqld

    2.配置mysql-slave端
     1)、追加my.cnf配置

    1. server-id = 12
    2. log-bin = mysql-bin                   #打开二进制功能,MASTER主服务器必须打开此项
    3. expire_logs_days=15                   #日志过期时间
    4. max_binlog_size=1024M                 #binlog单文件最大值
    5. binlog-rows-query-log_events=1        #可以在binlog日志中看到语句的原始sql
    6. ?
    7. binlog-format=ROW
    8. ###binlog-row-p_w_picpath=minimal     #允许应用程序只能对行的镜像数据进行复制,而不在关心行是否已经进行了DML操作
    9. ?
    10. ###gtid模式关键参数
    11. gtid-mode=on
    12. enforce-gtid-consistency=true
    13. log-slave-updates=true #从库做为其他从库的主库时用
    14. master-info-repository=TABLE
    15. relay-log-info-repository=TABLE
    16. ##从库用,验证 binlog 内容的正确性
    17. binlog-checksum=CRC32 #验证 binlog 内容的正确性
    18. source-verify-checksum=1
    19. replica_sql_verify_checksum=1

     2)、重启MySQL服务

    systemctl restart mysqld

    3.主从搭建配置
    1、master端
    1)新建用户,mysql登陆进去

    1. CREATE USER slave@'%' identified by 'Htjs_JS_2023';
    2. GRANT Replication slave ON *.* to slave@'%';
    3. ALTER USER slave@'%' IDENTIFIED WITH mysql_native_password BY 'Htjs_JS_2023';
    4. flush privileges;

    2)查看主库状态

    MYSQL>show master status\G;

    3)查看gtid状态

    show  variables like '%gtid%';

     2、slave端
    1)从库上执行命令

    change master to master_host='192.168.110.161',master_port=13306,master_user='slave',master_password='Htjs_JS_2023',master_auto_position=1 ;

    2)开启同步

    start slave;

    3)查看同步状态

    show slave status\G;

    4.主从验证
    1.主库新建数据库及用户

    create database swgxpt CHARACTER SET utf8 ;

    2.验证主从,从库执行

    show slave status\G;

    从库检查是否有无新建数据库、用户、相应的表结构。
        

    【主从切换】:

    切换步骤:

    1 切断应用对主库的流量

    2 主库、备库设置只读

    1. set global read_only=ON;
    2. set global super_read_only=ON;

    3 查看备库复制进程状态

    show slave status\G

    确认Slave_IO_Running,Slave_SQL_Running状态为YES,Seconds_Behind_Master为0

    4 比对主备两边的GTID是否一致

    方法一:获取主备两边的executed_gtid集合,进行比对

    select @@global.gtid_executed;

    5 从库停掉复制进程并清空主从信息

    1. stop slave;
    2. reset slave all;

    6 从库关闭只读开启读写,转为新主库

    1. set global read_only=off;
    2. set global super_read_only=off;

    7 主库设置执行新主库的复制链路,转为新备库,完成主从切换

    1. change master to master_host='192.168.110.162',master_port=13306,master_user='slave',master_password='Htjs_JS_2023',master_auto_position=1 ;
    2. start slave;
    3. show slave status\G

    8 应用流量切向新主库

  • 相关阅读:
    【分析笔记】全志平台 TWI 上拉电压异常的问题
    Leetcode-429.N叉树的层序遍历
    Codeforces Round #804 (Div. 2)
    葡萄干数据集
    AR手势识别交互,让应用更加“得心应手”
    基于javaweb高校浴池管理系统
    通过模糊测试寻找车载蓝牙的安全漏洞
    QGIS003:【04地图导航工具栏】-地图显示、新建视图、时态控制、空间书签操作
    Databricks 入门之sql(二)常用函数
    PlantUML Integration 编写短信服务类图
  • 原文地址:https://blog.csdn.net/rendongxingzhe/article/details/132855995