一、数据库安装
Mysql数据库安装路径:/opt/mysql
Mysql数据库数据文件路径:/opt/mysql/data
Mysql数据库root用户登录密码:admin
1、安装MySQL之前先检查linux服务器上是否已经安装mariadb数据库
检查命令:yum list installed | grep mariadb
若有mariadb,需要先卸载,否则按照MySQL会冲突
卸载命令:yum -y remove mariadb*
2、上传MySQL安装包到linux服务器并解压
命令:tar -zxvf mysql-5.7.21-linux-glibc2.12-x86_64.tar.gz
mv mysql-5.7.31-el7-x86_64 mysql
3、为MySQL文件夹分配属组:
命令:chown -R mysql:mysql mysql
若出现如下错误,说明服务器上还没有mysql属组,需要先创建mysql属组:
4、创建保存数据库数据的文件夹
命令:cd /opt/mysql
mkdir data
chown mysql:mysql ./data/
chmod 775 ./data/
5、创建配置文件
命令:cd /opt/mysql/support-files/
新建文件:vi my_default.cnf
cp my_default.cnf /etc/my.cnf
6、设置开机启动
命令:cd /opt/mysql/support-files/
cp mysql.server /etc/init.d/mysql
7、初始化数据库
命令:cd /opt/mysql/bin
./mysqld --initialize --user=mysql --basedir=/opt/mysql/ --datadir=/opt/mysql/data/
cd /opt/mysql/data/
cat mysqld.log
8、添加自动启动列表
命令:chkconfig --add mysql
chkconfig --list
9、登录数据库
命令:mysql -uroot -p
报错:bash:mysql:command not found ...
原因:由于系统默认会查找/usr/bin下的命令,如果这个命令不在这个目录下,当然会找不到命令,我们需要做的就是映射一个链接到/usr/bin
命令:ln -s /opt/mysql/bin/mysql /usr/bin
需要先启动数据库,再登录数据库
10、登录后进行数据库配置
修改密码:
mysql> set password=password('admin');
Query OK, 0 rows affected, 1 warning (0.00 sec)
赋权操作:
mysql> grant all privileges on *.* to root@'%' identified by '123456' WITH GRANT OPTION;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> update user set host='%' where user = 'root';(root表示想要被连接的数据库的用户名,“%”表示允许所有机器能访问root用户)
ERROR 1062 (23000): Duplicate entry '%-root' for key 'PRIMARY'
mysql> flush privileges;(必须使用flush privileges的两种情况1、改密码。2、授权超用户)
Query OK, 0 rows affected (0.00 sec)
mysql> exit
Bye
数据库安装配置结束!!!
二、数据库全量备份
#备份全量文件-放置文件夹
BACKUP_DIR=/home/mysqlbackup/$(date +%Y%m%d)
#创建全量备份的文件夹
mkdir -p $BACKUP_DIR
#全量备份数据库
mysqldump -uroot -padmin --quick --events --all-databases --flush-logs --delete-master-logs --single-transaction > $BACKUP_DIR/mysql.sql
#压缩全量备份文件
tar -zcvf $BACKUP_DIR/mysql.tgz $BACKUP_DIR/mysql.sql
echo "全量备份数据库成功"
--quick:不缓冲查询,直接导出到标准输出。默认为打开状态,使用--skip-quick取消该选项。
--events:导出事件
--all-databases:导出全部数据库
--flush-logs:
开始导出之前刷新日志。
请注意:假如一次导出多个数据库(使用选项--databases或者--all-databases),将会逐个数据库刷新日志。除使用--lock-all-tables或者--master-data外。在这种情况下,日志将会被刷新一次,相应的所以表同时被锁定。因此,如果打算同时导出和刷新日志应该使用--lock-all-tables 或者--master-data 和--flush-logs。
--delete-master-logs:master备份后删除日志. 这个参数将自动激活--master-data。
--single-transaction:该选项在导出数据之前提交一个BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于多版本存储引擎,仅InnoDB。本选项和--lock-tables 选项是互斥的,因为LOCK TABLES 会使任何挂起的事务隐含提交。要想导出大表的话,应结合使用--quick 选项。
只备份某个数据库(如:test库)
mysqldump -u用户名 -p密码 数据库名 > 输出路径及sql文件名
mysqldump -uroot -padmin test >/home/test.sql
三、数据库增量备份
1、修改数据库配置文件my.cnf
增加 binlog_format=MIXED内容,指定binlog格式
2、编写增量备份脚本
#!/bin/bash
backup_dir=/home/mysqlbackup/binlog/$(date +%Y%m%d)
#创建增量备份的数据的保存文件夹
mkdir -p $backup_dir
# 设置mysql的登录用户名和密码(根据实际情况填写)
mysql_user="root"
mysql_password="admin"
mysql_port="3306"
#增量备份时复制mysql-bin.00000*的目标目录,提前手动创建这个目录
#mysql的index文件路径(依据自己的),binlog文件所处位置一般在mysql的data目录下
binlog_dir=/var/lib/mysql/data
binlog_index=$binlog_dir/mysql-bin.index
# 判断mysql实例是否正常运行
welcome_msg="start backup binlog, please wait..."
mysql_ps=`ps -ef |grep mysql |wc -l`
mysql_listen=`netstat -an |grep LISTEN |grep $mysql_port|wc -l`
if [ [$mysql_ps == 0] -o [$mysql_listen == 0] ]; then
echo "$(date +'%Y-%m-%d %H:%M:%S'): ERROR:MySQL is not running! backup stop!"
exit
else
echo "$(date +'%Y-%m-%d %H:%M:%S'): $welcome_msg"
fi
#这个是用于产生新的mysql-bin.00000*文件(mysqladmin路径可以写全最好)
/usr/local/mysql/bin/mysqladmin -u$mysql_user -p$mysql_password flush-logs
# wc -l 统计行数
# awk 简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
Counter=`wc -l $binlog_index |awk '{print $1}'`
NextNum=0
CopyNum=0
#这个for循环用于比对$Counter,$NextNum这两个值来确定文件是不是存在或最新的
for file in `cat $binlog_index`
do
#basename用于截取mysql-bin.00000*文件名,去掉类似./mysql-bin.000005前面的./
base=`basename $file`
NextNum=`expr $NextNum + 1`
# 跳过最新正在使用的日志
if [ $NextNum -eq $Counter ]
then
echo `date +"%Y-%m-%d %H:%M:%S":` $base skip!
else
dest=$backup_dir/$base
if(test -e $dest)
#test -e用于检测目标文件是否存在,存在就写exist!到$logFile去
then
echo `date +"%Y-%m-%d %H:%M:%S":` $base exist!
else
cp $binlog_dir/$base $backup_dir
CopyNum=`expr $CopyNum + 1`
echo `date +"%Y-%m-%d %H:%M:%S":` $base copyed!
fi
fi
done
echo `date +"%Y-%m-%d %H:%M:%S":` $CopyNum new binlogs backup success!
其中:
backup_dir:备份文件存放路径
binlog_dir:binlog文件所处位置一般在mysql的data目录下
binlog_index=$binlog_dir/mysql-bin.index中mysql-bin.index对应my.cnf中的log-bin项,若my.cnf中log-bin=master-bin,则此处binlog_index=$binlog_dir/master-bin.index
mysqladmin命令填写绝对路径
四、设置服务器自动任务周期进行数据库备份
1、修改crontab -e
2、添加定时任务:
0 2 * * 3 bash /home/mysqlBackUp.sh
//每周三的2点进行数据库全量备份
0 4 * * * bash /home/mysqlbackup-detla/binlog_backup.sh
//每天的4点进行数据库增量备份
数据库备份结束!!!
五、数据库恢复
1、全量备份恢复
使用 mysqldump 命令导出的 SQL 备份脚本,在进行数据恢复时可使用两种方法导入:
source命令:登录数据库,执行下述命令:
mysql> source /home/mysql.sql;
mysql命令:
mysql -uroot -padmin < /home/mysql.sql;
2、增量备份恢复
增量备份,备份的是mysql的data目录下的日志文件:mysql-bin.000123(数字部分根据实际情况)
查看增量备份的日志文件:
在mysql/bin目录下执行:./mysqlbinlog --no-defaults --base64-output=decode-rows -v /home/mysql/data/mysql-bin.000123(此处是备份的二进制日志的路径)
增量备份恢复:./mysqlbinlog --no-defaults 增量备份文件 | mysql -u 用户名 -p
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)