1.使用前准备
版本使用的是:mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz
可以去国内镜像源下载速度比较快
centos集成了mariadb,而安装mysql的话会和mariadb的文件冲突,所以一定需要先卸载掉mariadb
- 列出所有被安装的rpm package
rpm -qa | grep mariadb
- 卸载
rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64
- 查看有无安装mysql
rpm -qa | grep mysql
- 卸载流程
ps aux|grep mysql
find / -name mysql
rm -rf xxxxxxxxxxxx
- 首先解压
tar -zxvf mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz -C /usr/local
- 修改名称
mv mysql-5.7.29-linux-glibc2.12-x86_64 mysql
- 配置设置开机自启动
cd mysql/support-files/
cp mysql.server /etc/init.d/mysql
- 修改/etc/init.d/mysql参数
vim /etc/init.d/mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
- 建立一个mysql的组:
groupadd mysql
- 建立mysql用户,并且把用户放到mysql组:
useradd -r -g mysql mysql
- 给mysql用户设置一个密码:
passwd mysql
- 更改目录/usr/local/mysql 拥有者:
chown -R mysql:mysql /usr/local/mysql/
2.数据库初始化
cd /usr/local/mysql/bin/
./mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
-
如果出现这个错误 提示缺少一些库
- 执行
yum install -y libaio 或者 yum -y install numact 然后再执行安装操作
- 数据库加密
./mysql_ssl_rsa_setup --datadir=/usr/local/mysql/data
- 数据库启动
./mysqld_safe --user=mysql &
- 检查状态
ps -ef|grep mysql
3. 数据库操作
- 登录 首次登陆密码为上面初始化密码
./mysql -uroot -p
修改密码
set password=password('新密码');远程访问
grant all privileges on *.* to root@'%' identified by 'root';
flush privileges;
4.访问操作
- 开放本地防火墙端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
关闭防火墙也可以
5.后续配置
开机自启
- 添加服务
chkconfig --add mysql
- 开启自启
chkconfig mysql on
配置环境变量(可选操作)
vim /etc/profile
添加:
MYSQL_HOME=/usr/local/mysql
export MYSQL_HOME
- 配置生效
source /etc/profile
- 或者不配置环境变量,配置一个软连接(推荐!!!!!)
ln -s /usr/local/mysql/bin/mysql /usr/bin
下次可以直接使用mysql指令了
完成安装
5.主从配置
1.配置my.cnf文件
server_id主从id必须不一致
vim /etc/my.cnf
[clinet]
port = 3306
default-character-set=utf8
[mysqld]
port = 3306
server-id=64
explicit_defaults_for_timestamp=true
character-set-server=utf8
basedir= /usr/local/mysql
datadir= /usr/local/mysql/data
default-storage-engine=INNODB
log-bin=mysql-bin
2.在主库中配置
创建一个用户给从数据库并且给予权限,其中ip,改为从库ip地址
create user slave;
grant replication slave on *.* to 'slave'@'127.0.0.1'identified by 'root123';
flush privileges;
查询主库状态
show master status;
记录下面的file 和position
3. 在从库中配置
填入上面记录的值,master_host填主机ip
change master to master_host='127.0.0.1',master_port=3306,master_user='slave',master_password='root123',master_log_file='master-bin.000002',master_log_pos=2505;
然后执行
start slave; 关闭是stop slave
查看 slave 的状态
show slave status \G
这两个都是yes表示启动成功了
4.如果没有成功,请在主库中
flush logs;
show master status;
记下File, Position。
来到从库
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=154;
stop slave;
start slave;
show slave status \G;
可以看到已经成功完成主从配置
配置双主,只需要把从库当主库,主库当从库,按照以上思路再配置一遍即可
6.数据库备份
1. 全量备份
进入到自定义的脚本目录
/usr/local/mysql/sh
创建一个脚本
vim mysql_weekly.sh
编辑shell脚本
# 全备份路径
backDir=/usr/local/mysql/weekly
# 日志文件
logFile=/usr/local/mysql/weekly/weekly_all.log
# 获取当前时间,用于命名
nowDate=`date +%Y%m%d`
beginTime=`date +"%Y%m%d %H:%M:%S"`
# 进入备份文件夹
cd $backDir
dumpFile=$nowDate.sql
dumpFileTgz=$nowDate.sql.tgz
# mysqldump 导出所有数据库
echo dumping...
mysqldump -uroot -proot --quick --all-databases --flush-logs --delete-master-logs --single-transaction > $dumpFile
echo compressing...
# 压缩文件
tar czvf $dumpFileTgz $dumpFile
# 是否删除sql文件
#rm $dumpFile
endTime=`date +"%Y%m%d %H:%M:%S"`
echo begin:$beginTime end:$endTime $dumpFileTgz success >> $logFile
2. 增量备份
首先查看增量备份有没有开启,参考下图
创建脚本文件mysql_daily.sh
# 增量备份存放路径
backDir=/usr/local/mysql/daily
# binlog存放路径
binDir=/usr/local/mysql/data
# (上面开启binlog的路径,忘记了就通过mysql show variables like '%log_bin%'; 进行查询)
# binlog.index 文件路径
binIndex=/usr/local/mysql/data/mysql-bin.index
#(上面开启binlog的路径,忘记了就通过mysql show variables like '%log_bin%'; 进行查询)
# 日志文件
logFile=/usr/local/mysql/daily/bak-daily.log
# 将当前所有的日志写到磁盘,会新建一个00000*的binlog文件
mysqladmin -uroot -proot flush-logs
# 获取当前有几条binlog文件(需要保证是从1开始的)
count=`wc -l $binIndex | awk '{print $1}'`
nextNum=0
for file in `cat $binIndex`
do
# 获取文件名,去除文件夹名
base=`basename $file`
# 遍历每个binlog文件,如果是最新的不做操作,否则备份
nextNum=`expr $nextNum + 1`
if [ $nextNum -eq $count ]
then
echo $base skip! >> $logFile
else
dest=$backDir/$base
# file already exist
if(test -e $dest)
then
echo $base exist! >> $logFile
7. 定时任务
配置定时任务,去定时启动这2个脚本
输入如下命令,进入定时任务编辑界面:
crontab -e
添加如下命令(注意:linux的定时规则与spring的不同)
每天2点启动一次增量备份
0 2 * * * sh /usr/local/mysql/sh/mysql_daily.sh
0 2 5 * * sh /usr/local/mysql/sh/mysql_weekly.sh
8. 常见问题
1.授权给其他用用户到数据库的权限报错的问题解决,尤其在配置其他访问数据库权限的时候
查看是否有授权权限
select host,user,grant_priv,Super_priv from mysql.user;
发现 没权限,改成 Y
update mysql.user set grant_priv='y' where host='localhost';
update mysql.user set grant_priv='y' where host='%';
刷新权限
flush privileges;
2.linux忘记mysql密码快速处理方法
首先需要我们关闭mysql
service stop mysql
然后执行
mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
现在可以直接登陆,不需要密码
mysql -u root
修改密码,我的版本是5.7
update user set authentication_string=password("test") where user='root';
刷新权限后成功
flush privileges;