typora-copy-images-to: img
MySQL
安装
Ajo^iURC#r1830
1、编译安装
2、yum安装
【https://www.mysql.com/】
创建新用户并设置密码
# CREATE USER '新用户'@'localhost' IDENTIFIED BY 'password';
对数据库设置新用户的权限
# GRANT ALL PRIVILEGES ON 数据库名.* TO '新用户'@'localhost';
刷新权限
# FLUSH PRIVILEGES;
通过以上步骤,我们成功在Linux中使用MySQL添加用户。首先,我们连接到MySQL数据库,然后创建新用户并设置密码。接下来,我们为新用户设置适当的权限,最后刷新权限表以使其生效。
# 修改为允许远程访问
use mysql;
update user set host = '%' where user = 'root';
FLUSH PRIVILEGES;
yum安装的方式
1、在官网下载mysql rpm包
# wget https://dev.mysql.com/get/mysql80-community-release-el7-6.noarch.rpm
# rpm -ivh mysql80-community-release-el7-6.noarch.rpm
警告:mysql80-community-release-el7-6.noarch.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 3a79bd29: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:mysql80-community-release-el7-6 ################################# [100%]
# ls /etc/yum.repos.d/mysql-community.repo
/etc/yum.repos.d/mysql-community.repo
2、修改yum源仓库,修改默认安装版本为5.7
# vim /etc/yum.repos.d/mysql-community.repo
第5行 enabled=0 改为 =1
第13行 enabled=1 改为 =0
3、安装
# yum install mysql-community-server -y
可能出现的问题:
1)、获取 GPG 密钥失败:[Errno 14] curl#37 - "Couldn't open file /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022"
解决方法: 把 gpgchecck=0 不检查秘钥
2)、由于系统不干净,可能安装过mariadb
# rpm -qa | grep -i mariadb | xargs -I {} rpm -e --nodeps {}
4、安装Mysql_package.zip
unzip Mysql_package.zip
cd package
yum localinstall * -y
MySQL - 基本使用
有个巨坑:
之前安装过mariadb,导致mysql数据目录 /var/lib/mysql 有mariad数据库的残留
解决方法: 【数据库初始化】
# rm -rf /var/lib/mysql/*
# systemctl restart mysqld
1、mysql的使用
【修改初始密码】
# grep password /var/log/mysqld.log
2022-05-24T20:48:56.966105Z 1 [Note] A temporary password is generated for root@localhost: +&!69HeX6ooI
//密码是一串不规则的字符
# mysqladmin -uroot -p'初始密码' password '新密码' //建议密码: Qf..2022
2、mysql命令使用
选项
-u //指定用户名
-p //指定密码,中间不要有空格,最好要用'' 单引号引起来
-e //不需要登入数据库,直接在终端执行SQL语句
-D //导入数据库文件,导入指定的库
-h //指定主机
案例:
# mysql -uroot -p'Qf..2022' //登入当前机器的数据库
# mysql -uroot -p'Qf..2022' -h 10.3.148.200 //登入远程机器10.3.148.200的数据库
MySQL - 破解密码
1、设置免密登入
# vim /etc/my.cnf
在[mysqld] 下面添加
skip-grant-tables
# systemctl restart mysqld
2、更新密码
# mysql
mysql> update mysql.user set authentication_string=password('Qf..2023') where User='root';
【authentication_string 密码字段 ; Qf..2023 新密码】
3、注释免密登入
# vim /etc/my.cnf
注释 #skip-grant-tables
# systemctl restart mysqld
4、登入测速
# mysql -uroot -p'Qf..2023'
MySQL - AB复制
环境准备:
最少需要两台机器
master: 10.3.148.200
slave: 10.3.148.212
1、机器要互相通信
2、selinux 防火墙firewalld要关闭
# getenforce
# systemctl status firewalld
AB复制的模式:
一主一从 、一主多从、双主、多主多从
复制的工作原理:
要想实现ab复制,那么前提是master上必须开启二进制日志
1)首先master将数据更新记录到二进制日志文件中
2)从slave start开始,slave通过I/O线程向master请求二进制日志文件,slave要知道向谁请求从哪个位置点请求
3)master接收到slave的I/O请求之后,就会从相应的位置点开始,给slave传日志
4)slave接收到日志后,会写入本地的中继日志中
5)slave通过sql线程读取中继日志中的内容,在数据库中执行相应的操作,到此为止,master和slave上的数据一致,之后slave服务器进入等待状态,等待master的后续更新
复制工作原理图:

配置过程
要知道向谁请求从哪个位置点请求1、master:开启二进制日志
#
在 [mysqld] 添加
log-bin=binlog //开启日志,日志名称为binlog
server-id=1 //设置服务ID,两台机器不能相同
# systemctl restart mysqld
2、master:授权slave机器可以过来读取日志
# mysql -uroot -p'Qf..2022'
mysql> grant replication slave on *.* to repl@10.3.148.212 identified by 'Qf..2022';
//授权slave机器10.3.148.212能使用repl用户和密码Qf..2022 过来读取密码
mysql> flush privileges; //可选操作,刷新权限
3、要在master: 查看日志名称以及pos位置点
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000001 | 600 | | | |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
【注意,此时不要再去操作master机器,防止日志更新,pos节点发生改变】
4、slave:修改配置文件,设置server-id
# vim /etc/my.cnf
在 [mysqld] 添加
server-id=2 //设置服务ID,两台机器不能相同
# systemctl restart mysqld
5、slave:向谁请求从哪个位置点请求日志
# mysql -uroot -p'Qf..2022'
mysql> change master to master_user='repl' , master_password='Qf..2022' , master_host='10.3.148.200' , master_log_file='binlog.000001' , master_log_pos=600;
//配置slave去哪台机器读取日志,使用什么用户名什么密码,去读取哪个日志,从哪个点开始读
6、slave:启动同步
mysql> start slave;
mysql> show slave status\G \\验证IO 和 SQL 是否都是yes

验证是否同步
1、在master创建数据库或者表,观察slave是否能同步


可能遇到的问题:
1、server-id 设置成一样
2、克隆数据库,导致UUID一样
# vim /var/lib/mysql/auto.cnf //随便修改一下UUID
3、change master to 写错了,会发现IO线程是No 或者 connection
mysql> stop slave;
mysql> reset slave; //初始化
mysql> change master to ...
4、发现SQL线程 No
5、为单个数据库添加用户名和密码,并允许哪些权限和IP连接
grant all on qqfarm.* to qqfarm@'%'identified by 'Cc..2022'
grant all on 数据库名.* to 用户名@主机名 identified by '密码'
#安装LAMP并上线qqfarm
#!/bin/bash
#安装LAMP
hostname localhost
systemctl stop firewalld
setenforce 0
yum install httpd -y
yum install mariadb-server php php-mysql -y
systemctl restart httpd
systemctl restart mariadb
#编写apache配置文件及项目访问路径
cat /etc/httpd/conf/httpd.conf | grep index.php
case `echo $?` in
0)
echo "已经存在index.php"
;;
*)
sed -i "s/index.html/index.html index.php/" /etc/httpd/conf/httpd.conf
;;
esac
rm -rf /etc/httpd/conf.d/qqfarm.conf
touch /etc/httpd/conf.d/qqfarm.conf
#配置虚拟主机,编写/etc/httpd/conf.d/qqfarm.conf
echo '<Directory "/qqfarm">' >> /etc/httpd/conf.d/qqfarm.conf
echo ' AllowOverride None' >> /etc/httpd/conf.d/qqfarm.conf
echo ' Require all granted' >> /etc/httpd/conf.d/qqfarm.conf
echo '</Directory>' >> /etc/httpd/conf.d/qqfarm.conf
echo '<VirtualHost 192.168.109.202:80>' >> /etc/httpd/conf.d/qqfarm.conf
echo ' ServerAdmin root@localhost' >> /etc/httpd/conf.d/qqfarm.conf
echo ' DocumentRoot "/qqfarm"' >> /etc/httpd/conf.d/qqfarm.conf
echo ' ServerName qqfarm.cc.com' >> /etc/httpd/conf.d/qqfarm.conf
echo '</VirtualHost>' >> /etc/httpd/conf.d/qqfarm.conf
#配置qqfarm位置
systemctl restart httpd
yum install unzip -y
mkdir /qqfarm
unzip farm-ucenter1.5.zip
cp -r upload/* /qqfarm/
#配置数据库
mysql -uroot -e "create database qqfarm;"
mysql -uroot -D qqfarm < /qqfarm/qqfarm.sql
systemctl restart httpd
systemctl restart mariadb
systemctl restart network
#修改/etc/php.ini文件
sed -i "/^short_open_tag/ s/short_open_tag = Off/short_open_tag = On/" /etc/php.ini
#修改目录权限
chmod 777 -R /qqfarm/bbs/ /qqfarm/home/ /qqfarm/ucenter/
systemctl restart httpd
#后台页面http://虚拟机ip(192.168.109.202:80)/home
tar.gz安装方式
步骤一、
将mysql解压到/usr/local下
# cd /usr/local/mysql
创建 log data 目录
# cd log
创建 mysql.log mysql.sock mysql.pid
# vim /etc/my.cnf
[mysqld]
#mysql服务端口
port=3306
#安装目录
basedir=/usr/local/mysql
#数据存放目录
datadir=/usr/local/mysql/data
#sock文件地址
socket=/usr/local/mysql/log/mysql.sock
#错误日志存放地址
log-error=/usr/local/mysql/log/mysql.log
#pid文件地址
pid-file=/usr/local/mysql/log/mysql.pid
#服务端编码
character-set-server=utf8
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
[client]
#客户端连接端口
port=3306
##客户端连接sock
socket=/usr/local/mysql/log/mysql.sock
#客户端编码
default-character-set=utf8
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
步骤二、
创建用户并改变mysql安装目录的属主属组
# groupadd mysql
# cd /usr/local/mysql
# useradd -r -g mysql mysql
# chown -R mysql:mysql mysql的安装目录
步骤三、
初始化数据库并查看密码
# bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
# cat log/mysql.log

步骤四、
修改初始密码 设置开机自启 允许外部连接MySQL 启动MySQL
# cd /usr/local/mysql
# cat log/mysql.log | grep password
# bin/mysql -uroot -p
输入密码
mysql> set password=password("root");
mysql> grant all privileges on *.* to root@'%' identified by 'root' with grant option; 允许其它机器连接
mysql> flush privileges;
mysql> exit;