Cover photo

Linux环境安装-MySQL运维

本文记录在MySQL安装成功后常用的配置

修改存储路径

  • 默认数据文件保存在 /var/lib/mysql/ 下

  • 创建新存储目录

    cd /home

    mkdir mysql_data

  • 停止mysql服务

    systemctl stop mysqld.service

  • 迁移文件

    cp -arp /var/lib/mysql /home/mysql_data/

    • a 用于复制整个目录,包括目录中的子目录等都递归复制,而且还要保持文件的访问模式,所有者,时间戳等属性与原文件一样。

    • -r 递归复制目录及其子目录内的所有内容

    • -p 等于–preserve=模式,所有权,时间戳

  • 修改配置文件

    vi /etc/my.cnf

    • mysqld 节点

      • 将 datadir 及 socket 替换为新路径

      *     *datadir=/home/mysql_data/mysql

           socket=/home/mysql_data/mysql/mysql.sock

    • client 节点(新增)

      • socket=/home/mysql_data/mysql/mysql.sock

new storage path
new storage path
  • 启动服务

    systemctl start mysqld.service

    systemctl status mysqld.service

start success
start success

创建数据库

  • mysql -p 登录

  • mysql> create database db_demo;

创建账号及授权

  • 默认的root账户不允许远程登录访问,也不推荐直接将root账号设置为允许远程登录访问

  • 创建用户名为 test,密码为 password 的账号

    mysql> create user test identified by 'password';

  • 账号 test 授权给数据库 db_demo

    mysql> grant all privileges on db_demo.* to 'test';

  • 刷新权限

    mysql> flush privileges;

  • 查看账号授权

    show grants for 'test';

修改max_allowed_packet

  • 默认为4M,在大批量写入时,不够用

  • 修改配置文件,在[mysqld]节点下增加配置*,*max_allowed_packet=100M

    vi /etc/my.cnf

max_allowed_packet
max_allowed_packet
  • 重启mysql服务

  • 查看新参数

    mysql -p

    mysql> show variables like '%max_allowed_packet%';

new max_allowed_packet
new max_allowed_packet

定期备份数据库

  • 创建shell脚本

    cd /home/timing_jobs/

    vi mysql_db_backup.sh

    #!/bin/bash
    
    #保存备份个数,备份3天数据
    number=3
    #备份保存路径
    backup_dir=/home/mysqlbackup
    #日期
    dd=`date +%Y%m%d%H%M%S`
    #备份工具
    tool=mysqldump
    #将要备份的数据库
    database_name=db_demo
    
    #如果文件夹不存在则创建
    if [ ! -d $backup_dir ];
    then
        mkdir -p $backup_dir;
    fi
    
    #备份
    $tool --login-path=local $database_name > $backup_dir/$database_name-$dd.sql
    #压缩文件
    cd $backup_dir
    tar -zcvf $database_name-$dd.sql.tar.gz $database_name-$dd.sql
    #删除备份文件
    rm -rf $database_name-$dd.sql
    
    #写创建备份日志
    echo "$(date "+%Y-%m-%d %H:%M:%S") create $backup_dir/$database_name-$dd.dupm" >> /home/timing_jobs/logs/db_backup.log
    
    #找出需要删除的备份
    delfile=`ls -l -crt  $backup_dir/db_demo-*.sql.tar.gz | awk '{print $9 }' | head -1`
    
    #判断现在的备份数量是否大于$number
    count=`ls -l -crt  $backup_dir/db_demo-*.sql.tar.gz | awk '{print $9 }' | wc -l`
    
    if [ $count -gt $number ]
    then
      #删除最早生成的备份,只保留number数量的备份
      rm $delfile
      #写删除文件日志
      echo "$(date "+%Y-%m-%d %H:%M:%S") delete $delfile" >> /home/timing_jobs/logs/db_backup.log
    fi
    
  • 脚本授权

    chmod +x mysql_db_backup.sh

  • 添加定时任务

    crontab -e

    输入

    30 22 * * * /home/timing_jobs/mysql_db_backup.sh >> /dev/null 2>&1