美文网首页
Linux小白,MySQL多实例安装 + 主从配置

Linux小白,MySQL多实例安装 + 主从配置

作者: 程就人生 | 来源:发表于2021-03-12 19:53 被阅读0次

    想做主从库,但是资源又有限,不得不在一台服务器上做主从库。在一台服务器上部署MySQL多实例,目前主要有两种策略:
    1.配置多个实例,每个实例对应不同的配置文件,曾经在windows服务器上就是这么做的;
    2.通过官方自带的 mysqld_multi 一个单独的配置文件来实现多实例,集中管理。
    这一次,在Linux服务器上安装MySQL多实例,就决定使用第二种策略。

    MySQL多实例安装

    第一步,安装MySQL之前的准备工作;

    #下载安装包
    wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.32-el7-x86_64.tar.gz
    
    #解压安装包
    tar zxvf mysql-5.7.32-el7-x86_64.tar.gz
    
    #迁移,保证放在合适的位置,方便日后维护;
    mv mysql-5.6.21-linux-glibc2.5-x86_64 /usr/local/mysql
    

    第二步,MySQL的相关配置;

    1.为MySQL创建专属用户;

    #创建mysql用户组
    groupadd -g 27 mysql
    
    #创建该组下的用户
    useradd -u 27 -g mysql-admin mysql
    
    #查看用户的id信息
    id mysql-admin
    uid=27(mysql-admin) gid=27(mysql) groups=27(mysql)
    
    创建用户时,-g 后第一个是用户名,第二个是组名

    2.创建MySQL多实例放置的目录

    #为每个实例创建单独的文件,以便存放对应的数据文件、日志文件、临时文件
    mkdir -p /mnt/databases/mysql/{mysql_3306,mysql_3307}
    mkdir /mnt/databases/mysql/mysql_3306/{data,log,tmp}
    mkdir /mnt/databases/mysql/mysql_3307/{data,log,tmp}
    
    #更改目录权限
    chown -R mysql-admin:mysql /mnt/databases/mysql/ 
    chown -R mysql-admin:mysql /usr/local/mysql/
    
    #添加环境变量
    echo 'export PATH=$PATH:/usr/local/mysql/bin' >>  /etc/profile 
    source /etc/profile 
    
    授权时,:前面是用户名,后面在组名

    3.创建配置文件my.cnf

    #使用vim打开配置文件,文件不存在会新建一个
    vim /usr/local/mysql/support-files/my.cnf
    #输入i进入插入模式
    i
    

    my.cnf内容如下

    [client]
    port=3306
    socket=/tmp/mysql.sock
    
    [mysqld_multi]
    mysqld=/usr/local/mysql/bin/mysqld_safe
    mysqladmin=/usr/local/mysql/bin/mysqladmin
    log=/mnt/databases/mysql/mysqld_multi.log
    
    [mysqld]
    user=mysql-admin
    basedir=/usr/local/mysql
    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
    
    [mysqld3306]
    mysqld=mysqld
    mysqladmin=mysqladmin
    datadir=/mnt/databases/mysql/mysql_3306/data
    port=3306
    server_id=3306
    socket=/tmp/mysql_3306.sock
    log-output=file
    slow_query_log=1
    long_query_time=1
    slow_query_log_file=/mnt/databases/mysql/mysql_3306/log/slow.log
    log-error=/mnt/databases/mysql/mysql_3306/log/error.log
    binlog_format=mixed
    log-bin=/mnt/databases/mysql/mysql_3306/log/mysql3306_bin
    
    [mysqld3307]
    mysqld=mysqld
    mysqladmin=mysqladmin
    datadir=/mnt/databases/mysql/mysql_3307/data
    port=3307
    server_id=3307
    socket=/tmp/mysql_3307.sock
    log-output=file
    slow_query_log=1
    long_query_time=1
    slow_query_log_file=/mnt/databases/mysql/mysql_3307/log/slow.log
    log-error=/mnt/databases/mysql/mysql_3307/log/error.log
    binlog_format=mixed
    log-bin=/mnt/databases/mysql/mysql_3307/log/mysql3307_bin
    

    4.操作完成后,保存退出

    #按ESC按钮退出编辑
    esc
    #强制保存修改内容
    :wq! 
    

    5.复制my.cnf文件到etc目录

    cp /usr/local/mysql/support-files/my.cnf /etc/my.cnf
    

    第三步,初始化数据库;
    1.初始化数据库

    #进入到mysql的bin目录下
    cd /usr/local/mysql/bin
    #执行初始化3306数据库
    ./mysqld --initialize --user=mysql-admin --basedir=/usr/local/mysql/ --datadir=/mnt/databases/mysql/mysql_3306/data
    
    #初始化3307数据库
    ./mysqld --initialize --user=mysql-admin --basedir=/usr/local/mysql/ --datadir=/mnt/databases/mysql/mysql_3307/data
    
    初始化成功结果图,产生临时密码

    2.拷贝启动文件

    cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
    

    3.mysqld_multi进行多实例管理:

    #启动全部实例:
    /usr/local/mysql/bin/mysqld_multi start
    
    #查看全部实例状态:
    /usr/local/mysql/bin/mysqld_multi report 
    
    #启动单个实例:
    /usr/local/mysql/bin/mysqld_multi start 3306 
    
    #停止单个实例:
    /usr/local/mysql/bin/mysqld_multi stop 3306 
    
    #查看单个实例状态:
    /usr/local/mysql/bin/mysqld_multi report 3306 
    
    #停止实例命令失效时,使用如下命令:
    mysqladmin -u root -p -S /tmp/mysql_3306.sock shutdown
    Enter password:
    
    #查看启动进程
    netstat -tlnap | grep mysql
    
    初始化成功结果图,产生临时密码

    使用临时密码登录数据库,登录后重置密码,最后再重启;

    #逐一登录mysql,输入临时密码登录;
    mysql -S /tmp/mysql_3306.sock -p
    Enter password:
    #设置新密码
    set password for root@'localhost'=password('123456'); 
    flush privileges; 
    

    到目前为止,数据库多实例已经安装好,接下来做主从同步;

    主从同步##

    第一步,主从库配置文件修改;

    #打开配置文件my.cnf
    vim /usr/local/mysql/support-files/my.cnf
    #在 主库[mysqld3306] 下增加配置,忽略同步的数据库名称;
    binlog-ignore-db=mysql
    binlog-ignore-db=performance_schema
    binlog-ignore-db=sys
    

    配置更改后,进行数据库重启;

    #关闭3306,启动3306;3307没有修改,不需要进行重启;
    mysqladmin -u root -p -S /tmp/mysql_3306.sock shutdown
    mysqld_multi start 3306
    

    第二步,主从库授权;
    1.主库授权

    grant replication slave on *.* to 'test'@'127.0.0.1' identified by '123456';
    #授权后需要刷新后,才能生效;
    flush privileges; 
    #查看主库授权状态
    show master status; 
    
    主库授权

    2.从库授权

    #注意:从库的几个参数一定要和主库的保持一致
    change master to master_host='127.0.0.1',master_user='test',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=154;
    #启动主从拷贝
    start slave; 
    #查看拷贝状态
    show slave status;
     #清除授权,授权信息也被清除掉
    reset slave all;
    #查看状态
    show slave status \G
    

    当查看从库的slave状态,下面两个状态都是yes时,代表主从库配置成功了。

    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    

    最后,加点补充,为了防止从库被篡改,建立一个新的只读账户,对外只开放这个只读账号,禁止对从库数据库的操作,只能读,不能写。这样主从库的同步又多了一个保障。

    GRANT SElECT ON *.* TO 'root_readonly'@'%' IDENTIFIED BY "123456";
    #执行刷新,刷新后;
     flush privileges;
    

    参考文章:
    https://blog.csdn.net/lihuarongaini/article/details/100119827
    https://blog.csdn.net/weixin_42793426/article/details/81329720
    Win10下Mysql主从库配置二次整理:https://www.jianshu.com/p/70913d116f31
    Linux小白,初次安装MySQL,大神请绕路:https://www.jianshu.com/p/757663b26d82

    相关文章

      网友评论

          本文标题:Linux小白,MySQL多实例安装 + 主从配置

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