# Linux环境安装-MySQL运维

By [Yeanuo](https://paragraph.com/@yeanuo) · 2023-10-27

---

本文记录在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](https://storage.googleapis.com/papyrus_images/56204387384498a1a54065999091f9835f7bc785707c2bdab78737fa6ac97ada.png)

new storage path

*   启动服务
    
    `systemctl start mysqld.service`
    
    `systemctl status mysqld.service`
    

![start success](https://storage.googleapis.com/papyrus_images/53e3e886e129813dd8a07d016911663ccb61d506aef49fb45bf0545c7be1f011.png)

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](https://storage.googleapis.com/papyrus_images/5bd7fa6515e4bf7be750293a8039e0b163037effe368b0ed997619e9c7ea513d.png)

max\_allowed\_packet

*   重启mysql服务
    
*   查看新参数
    
    `mysql -p`
    
    `mysql> show variables like '%max_allowed_packet%';`
    

![new max_allowed_packet](https://storage.googleapis.com/papyrus_images/5c4fb7b5208c0a3740705189c7eec35e6cf103b5400e2ced1a0ead0644ef7676.png)

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`

---

*Originally published on [Yeanuo](https://paragraph.com/@yeanuo/linux-mysql-2)*
