Linux_MySQL

发布时间 2023-08-09 17:04:53作者: Boldcc
typora-copy-images-to: img

MySQL


  • 安装
  • AB复制

安装

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的后续更新

    复制工作原理图:

image-20220526141830641

配置过程
要知道向谁请求从哪个位置点请求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

image-20220526145437356

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

image-20220526145651914

image-20220526145729364

可能遇到的问题:
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

image-20230718135431112

步骤四、
修改初始密码  设置开机自启 允许外部连接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;