一、安装步骤
我喜欢安装在/usr/local/mysql目录下
#切换目录
cd /usr/local/
#下载文件
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz
#解压文件
tar -zxvf mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz -C /usr/local
#删除压缩包
rm -rf mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz
#文件改名
mv mysql-5.7.38-linux-glibc2.12-x86_64 mysql-------创建mysql用户组 一定按照如下要求来安装!!!-----------
# 创建MySQL用户组
groupadd mysql
# 添加MySQL用户并添加到MySQL用户组
useradd -r -g mysql mysql-------创建数据目录-----------cd /usr/local/mysql
mkdir data
#赋予权限
chown mysql:mysql -R /usr/local/mysql/data/
配置mysql的配置文件
#增加配置文件
vim /etc/my.cnf
#内容如下[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=/usr/local/mysql
# 设置mysql数据库的数据的存放目录
datadir=/usr/local/mysql/data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。
max_connect_errors=10
# 服务端使用的字符集默认为utf8mb4
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
#mysql_native_password
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8mb4
mysql初始化
./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql --initialize–defaults-file:默认配置文件地址
–datadir:mysql存储数据目录 按照实际地址来!!!!!!!!!
–basedir:mysql安装目录 按照实际地址来!!!!!!!!!!
–user:mysql用户
请牢记返回的默认密码
启动服务
/usr/local/mysql/support-files/mysql.server start
启动成功截图
# 设置密码
SET PASSWORD = PASSWORD('ok');
# 设置用户的访问密码用不过期
ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
#刷新权限
FLUSH PRIVILEGES;
#开启可以远程登录
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '你的密码';
#刷新权限
FLUSH PRIVILEGES;
开启端口白名单
# 开启端口3306
firewall-cmd --zone=public --add-port=3306/tcp --permanent
# 重启防火墙
firewall-cmd --reload
# 查看已经开放的端口
firewall-cmd --list-ports
配置环境变量
如果不配置我们需要去bin目录下执行mysql 主要方便连接使用和操作
#将MySQL设置为命令
export PATH=/opt/lampp/bin:$PATH
source /etc/profile
导入文件出现的问题
the table is full
根据网上的教程,在my.cnf文件夹增加如下配置,重启mysql后并未生效
tmp_table_size = 1024M
max_heap_table_size = 1024M
通过命令尝试查看mysql版本号,想去搜索一下是否是版本问题,发现提示配置文件内容错误
我也只是草率看网上直接复制到最后面[client]就完事了,实际我们在粘贴中需要追加到[mysqld]下方。
2. 设置mysql开机自启动
方案一 将mysql交给systemctl来管理
#创建文件
vi /etc/systemd/system/mysqld.service
#文件内容
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=https://dev.mysql.com/doc/refman/8.0/en/using-systemd.html
After=network.target
After=syslog.target[Install]
WantedBy=multi-user.target[Service]
User=mysql
Group=mysql
Type=simple
TimeoutSec=0
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf $MYSQLD_OPTS
# EnvironmentFile=/etc/sysconfig/mysql
LimitNOFILE=65535
Restart=on-failure
RestartPreventExitStatus=1
Environment=MYSQLD_PARENT_PID=1
PrivateTmp=false
执行命令
加载 systemctl文件
systemctl daemon-reload
启动 MySQLsystemctl start mysqld
关闭Mysqlsystemctl stop mysqld
重启mysql
systemctl restart mysqld
设置开机自启
systemctl enable mysqld
方案二 创建启动脚本
#在/etc/rc.d/init.d/编辑一个新文件autostartmysql.sh
cd /etc/rc.d/init.d/
vim ./autostartmysql.sh
#文件内容#!/bin/sh
# chkconfig: 2345 10 90
# description: myservice...
/usr/local/mysql/support-files/mysql.server start
#为autostartmysql.sh赋予权限
chmod +x ./autostartmysql.sh
#将autostartmysql.sh添加到 chkconfig 中
chkconfig --add ./autostartmysql.sh
chkconfig autostartmysql.sh on
#查看是否添加成功
chkconfig --list
看到3、4、5状态为开或者为 on 则表示成功。如果是 关或者 off 则执行一下
chkconfig --level 345 autostartmysql.sh on#删除开启自启任务
chkconfig --del
3.Mysql每晚定时备份
准备备份脚本
vim /usr/local/mysql/backupdb.sh
#!/bin/bash
#备份路径
BACKUP=/home/mysql-bak/ae
#当前时间
DATETIME=$(date +%Y-%m-%d)
LOG_FILE=/usr/local/mysql/bak-sh/logs/ae/$DATETIME".log"
echo "===备份开始:$(date +"%Y-%m-%d %H:%M:%S")===" | tee -a ${LOG_FILE}#数据库名称
DATABASE=ae
#数据库地址
HOST=127.0.0.1
#数据库用户名
DB_USER=root
#数据库密码
DB_PW=root
#创建备份目录
[ ! -d "${BACKUP}/$DATETIME" ] && mkdir -p "${BACKUP}/$DATETIME"
[ ! -d "${LOG_FILE}" ] && touch "${LOG_FILE}"
echo "备份文件存放于${BACKUP}/$DATABASE-$DATETIME.sql" | tee -a ${LOG_FILE}
#开始备份
echo "===备份文件开始===" | tee -a ${LOG_FILE}
mysqldump --verbose -h localhost -u${DB_USER} -p${DB_PW} ${DATABASE} >${BACKUP}/$DATETIME/$DATABASE-$DATETIME.sql 2>> $LOG_FILE
echo "===备份文件结束===" | tee -a ${LOG_FILE}
#压缩成tar.gz包
cd $BACKUP
tar -zcvf $DATETIME.tar.gz $DATETIME
#备份到服务器B
#scp $DATABASE-$DATETIME.sql root@ip:/home/mysqlBackup
#删除备份目录
rm -rf ${BACKUP}/$DATETIME
#删除10天(不含)前备份的数据,这边可以自行更改
find $BACKUP -mtime +10 -name "*.tar.gz" -exec rm -rf {} \;
echo "===数据库备份到服务器成功==="
创建定时任务
#添加任务
crontab -e
#添加指令 下方是每晚一点执行
00 01 * * * /bin/sh /usr/local/mysql/backupdb.sh
出现的问题
- mysqldump命令找不到
/usr/local/mysql/bak-sh/ae-bak.sh:行23: mysqldump: 未找到命令。
解决方案1:
在配置文件中将mysqldump命令改为绝对路径。
whereis mysqldump 命令搜索
解决方案2:
#添加指令 下方是每晚一点执行 增加source /etc/profile
00 01 * * * source /etc/profile && /bin/sh /usr/local/mysql/bak-sh/ae-bak.sh
#查看定时任务执行日志
cat /var/log/cron
#查看定时任务执行中打印的日志
cat /var/spool/mail/root