vlambda博客
学习文章列表

[mysql]linux安装多个mysql,以及systemctl配置mysql实战



    环境

    Linux CentOS7.0mysqlmysql5.7安装方式 tar.gz二进制安装包


    背景

    由于需要多个数据库来做mysql集群。而多个mysql在windows上安装可以指定各种配置,而在linux由于使用yum安装的mysql,虽然安装很方便。各种文件配置以及路径不好由自己控制,不太好安装多个mysql。

    所以本文不适用yum自动安装msyql。而使用二进制包手动指定各种配置来安装msyql,而自动安装的mysql默认加载到systemctl管理,手动的则么有,本文也详细的解说了mysql如何自定义service 加载的systemctl(如果不了解systemctl机制,可跳转到我上一篇博文)。


    mysql安装

    安装路径主mysql:/xinyuan/mysql_m从mysql:/xinyuan/mysql_s

    前提工作


    wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz


    tar -xvf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz


    mv mysql-5.7.26-linux-glibc2.12-x86_64  /xinyuan/mysql_m

    本文的mysql安装路径上上诉已经说明


    gourpadd mysql
    useradd -r -g mysql mysql

    mysql(mysql_m)的安装

    1. 创建mysql数据目录(本文将数据目录放入mysql路径中),并给数据目录赋予权限

    cd  /xinyuan/mysql_m
    mkdir -p data
    mkdir -p tmp

    2. 赋予权限

    这块必须给文件赋权限,因为msyql需要这几个目录读写文件

    sudo chown mysql:mysql -R /xinyuan/mysql_m/data/
    sudo chown mysql:mysql -R /xinyuan/mysql_m/tmp/

    3. 配置配置文件

    一般mysql的默认配置文件都在/etc/my.cnf。本文将my.cnf放入mysql路径中

    vim /xinyuan/mysql_m/my.cnf

    配置文件内容

    [mysqld]
    # bind-address=127.0.0.1 # mysql的监听地址,如果想要远程访问,就把这行注释掉
    server-id = 1 # # 表示是本机的序号为1,一般来讲就是master的意思
    port=3306 # 端口号
    user=mysql # mysql以什么用户运行
    basedir=/xinyuan/mysql_m # MySQL 的安装路径
    datadir=/xinyuan/mysql_m/data # MySQL 数据文件的存储位置,也是数据表的存放位置
    socket=/xinyuan/mysql_m/tmp/mysql.sock # mysql以socket方式运行的sock文件位置
    log-error=/xinyuan/mysql_m/data/mysql.err # 错误日志位置
    pid-file=/xinyuan/mysql_m/data/mysql.pid # 进程id文件
    #character config
    character_set_server=utf8mb4 # 服务器使用的字符集
    symbolic-links=0 # 是否支持符号链接,即数据库或表可以存储在my.cnf中指定datadir之外的分区或目录,为0不开启
    tmpdir=/xinyuan/mysql_m/tmp # #mysql默认配置得缓存目录 默认是/tmp


    [mysql]
    socket=/xinyuan/mysql_m/tmp/mysql.sock

    4. 初始化mysql

    这块指定默认加载的mysql配置文件

    cd /xinyuan/mysql_m/bin
    ./mysqld --defaults-file=/xinyuan/mysql_m/my.cnf --user=mysql --initialize

    mysql(mysql_s)的安装

    与上面的mysql_m相同,只不过端口、安装路径以及配置文件里面的路径有变化

    1. 创建mysql数据目录(本文将数据目录放入mysql路径中),并给数据目录赋予权限

    cd  /xinyuan/mysql_s
    mkdir -p data
    mkdir -p tmp

    2. 赋予权限

    这块必须给文件赋权限,因为msyql需要这几个目录读写文件

    sudo chown mysql:mysql -R /xinyuan/mysql_s/data/
    sudo chown mysql:mysql -R /xinyuan/mysql_s/tmp/

    3. 配置配置文件

    一般mysql的默认配置文件都在/etc/my.cnf。本文将my.cnf放入mysql路径中

    vim /xinyuan/mysql_s/my.cnf

    配置文件内容

    [mysqld]
    # bind-address=127.0.0.1 # mysql的监听地址,如果想要远程访问,就把这行注释掉
    server-id = 2 # # 表示是本机的序号为1,一般来讲就是master的意思
    port=3307 # 端口号
    user=mysql # mysql以什么用户运行
    basedir=/xinyuan/mysql_s # MySQL 的安装路径
    datadir=/xinyuan/mysql_s/data # MySQL 数据文件的存储位置,也是数据表的存放位置
    socket=/xinyuan/mysql_s/tmp/mysql.sock # mysql以socket方式运行的sock文件位置
    log-error=/xinyuan/mysql_s/data/mysql.err # 错误日志位置
    pid-file=/xinyuan/mysql_s/data/mysql.pid # 进程id文件
    #character config
    character_set_server=utf8mb4 # 服务器使用的字符集
    symbolic-links=0 # 是否支持符号链接,即数据库或表可以存储在my.cnf中指定datadir之外的分区或目录,为0不开启
    tmpdir=/xinyuan/mysql_s/tmp # #mysql默认配置得缓存目录 默认是/tmp


    [mysql]
    socket=/xinyuan/mysql_s/tmp/mysql.sock

    4. 初始化mysql

    这块指定默认加载的mysql配置文件

    cd /xinyuan/mysql_s/bin
    ./mysqld --defaults-file=/xinyuan/mysql_s/my.cnf --user=mysql --initialize

    编写msyql主从的启动脚本

    脚本目录 /xinyuan/mysql_shell

    mysql_m的脚本

    vim /xinyuan/mysql_shell/mysql_m.sh脚本内容

    #!/bin/bash
    d=`date "+%y-%m/%d %H:%M:%S"`
    echo "$1 $d"

    if [ $1 = "start" ]; then
    echo "$d mysql_m start "
    nohup /xinyuan/mysql_m/bin/mysqld --defaults-file=/xinyuan/mysql_m/my.cnf --user=mysql >> mysql_m.log 2>&1 &

    elif [ $1 = "stop" ]; then
    echo "$d mysql_m stop"
    # 方法一:利用mysqladmin,但是这种方法需要用户名和输入密码
    # /xinyuan/mysql_m/bin/mysqladmin shutdown -proot
    # 方法二:直接关闭进程kill -9 [mysql的进程号]
    mysql_m=`ps -ef|grep mysql_m |grep -v 'grep\|stop' | awk '{print $2}' `
    kill -15 $mysql_m
    else
    echo "输入错误,请检查重新输入"
    fi

    赋予权限

    chmod 777 mysql_m.sh

    启动停止命令

    ./mysql_m.sh start
    ./mysql_m.sh stop

    mysql_s的脚本

    vim /xinyuan/mysql_shell/mysql_s.sh脚本内容

    #!/bin/bash
    d=`date "+%y-%m/%d %H:%M:%S"`
    echo "$1 $d"

    if [ $1 = "start" ]; then
    echo "$d mysql_s start "
    nohup /xinyuan/mysql_s/bin/mysqld --defaults-file=/xinyuan/mysql_s/my.cnf --user=mysql >> mysql_m.log 2>&1 &

    elif [ $1 = "stop" ]; then
    echo "$d mysql_s stop"
    # 方法一:利用mysqladmin,但是这种方法需要用户名和输入密码
    # /xinyuan/mysql_s/bin/mysqladmin shutdown -proot
    # 方法二:直接关闭进程kill -9 [mysql的进程号]
    mysql_s=`ps -ef|grep mysql_s |grep -v 'grep\|stop' | awk '{print $2}' `
    kill -15 $mysql_s
    else
    echo "输入错误,请检查重新输入"
    fi

    赋予权限

    chmod 777 mysql_s.sh

    启动停止命令

    ./mysql_s.sh  start
    ./mysql_s.sh stop

    将mysql加入systemctl管理,并设置关机保护

    mysql_m

    1. 创建.service文件路径
    /usr/lib/systemd/system/
    2. 创建mysql_m启动文件.service结尾

    vim /usr/lib/systemd/system/mysql_m.service文件配置内容,具体的文件配置的说明,请查看我上一篇systemctl的博文

    [Unit]
    Description=Mysql_m
    SourcePath=/xinyuan/mysql_shell
    Before=shutdown.target

    [Service]
    User=root
    Type=forking
    ExecStart=/xinyuan/mysql_shell/mysql_m.sh start
    ExecStop=/xinyuan/mysql_shell/mysql_m.sh stop

    [Install]
    WantedBy=multi-user.target
    3. systemctl配置刷新
    systemctl daemon-reload
    4. 启动mysql_m服务
    systemctl start mysql_m.service
    5. 查看mysql_m启动状态
    systemctl status mysql_m.service

    active(runnint) 代表启动成功

    [mysql]linux安装多个mysql,以及systemctl配置mysql实战

    6. 如果失败,可以查看systemctl日志
    journalctl -f |grep mysql_m

    mysql_s

    1. 创建.service文件路径
    /usr/lib/systemd/system/
    2. 创建mysql_m启动文件.service结尾

    vim /usr/lib/systemd/system/mysql_s.service文件配置内容,具体的文件配置的说明,请查看我上一篇systemctl的博文

    [Unit]
    Description=Mysql_s
    SourcePath=/xinyuan/mysql_shell
    Before=shutdown.target

    [Service]
    User=root
    Type=forking
    ExecStart=/xinyuan/mysql_shell/mysql_s.sh start
    ExecStop=/xinyuan/mysql_shell/mysql_s.sh stop

    [Install]
    WantedBy=multi-user.target
    3. systemctl配置刷新
    systemctl daemon-reload
    4. 启动mysql_s服务
    systemctl start mysql_s.service
    5. 查看mysql_s启动状态
    systemctl status mysql_s.service

    active(runnint) 代表启动成功

    [mysql]linux安装多个mysql,以及systemctl配置mysql实战

    6. 如果失败,可以查看systemctl日志
    journalctl -f |grep mysql_s

    结果

    最后运行 ps -ef|grep mysql,可以看到两个mysql都运行在了linux,大功告成


    其他

    登录密码

    第一次初始化mysql之后密码是默认的。默认密码通过 data/mysql.err查看

    修改默认密码

    切换到bin目录然后运行(由于我们sock文件制定到mysql目录下的tmp下,所以我们需要加上-S参数指定连接sock)

    ./mysql -uroot -p -S ../tmp/mysql.sock

    输入密码,然后进入mysql控制台,然后更改密码

    ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

    远程链接配置

    将root设置为任何ip都能拿他登录

    use mysql;
    update user set host = '%' where user = 'root';

    然后重启mysql即刻远程链接