MySQL Server环境安装

文章分类:MySQL 作者:Hackyle

更新时间:Fri Jun 30 11:18:41 CST 2023

MySQL是一款极其优秀的关系型数据库,本文主要介绍其在Windows和CentOS操作系统上的安装,以及基础环境的准备。

请读者注意

  • 请先耐心看完全部步骤,并在脑海中有了一个较为清晰的认识再开始操作。例如,你想要在Windows下安装,那你就先看这块的全部步骤,理解了每一步为了什么要这么做后,再开始实操。
  • 请认真对待安装过程中,控制台上报的错误,建议根据关键词去网上搜索一下。
  • 如果你按照本文的步骤一步一步地操作,但最终没有成功,请检查整个过程中步骤是否执行全了、控制台上是否报了一些错误而你忽略了
  • 每台机器的环境都有一定的差异,本文所介绍的内容不一定完全成功,请注意甄别。

内容导览


单机环境搭建

单机环境,区别于分布式与集群环境(例如主从环境)。指在单台机器上安装并运行MySQL Server。

Windows

以zip的方式安装,主要步骤:

  1. 下载:https://dev.mysql.com/downloads/。将MySQL的zip数据包,解压到你想放的位置
  2. 在MySQL的根目录下建立data目录,这个目录被用于存放数据库
  3. 在根目录建立ini文件,输入MySQL的配置
  4. 以管理员的权限打开cmd执行,进入bin目录:mysqld install
  5. 以管理员的cmd,进入根目录的bin目录,执行:mysqld --initialize-insecure;注意,如果速度较慢,则直接Ctrl+C,再执行一次
  6. 开启服务:net start mysql
  7. 连接MySQL,刚开始时密码为空,直接执行:mysql -uroot -p
  8. 进入到mysql后,执行:ALTER USER 'userName'@'localhost' IDENTIFIED BY 'New-Password-Here';
  9. 没有报错,显示“Query OK, 0 rows affected (0.06 sec)”。继续执行:FLUSH PRIVILEGES;
  10. 到此为止,MySQL环境搭建完毕

my.ini

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4 

[mysqld]
#设置3306端口
port = 3306 

# 设置mysql的安装目录
basedir="E:\ProgramFiles\Database\mysql-8.0.26-winx64"

# 设置mysql数据库的数据的存放目录
datadir="E:\ProgramFiles\Database\mysql-8.0.26-winx64\data"

# 临时
tmpdir="E:\ProgramFiles\Database\mysql-8.0.26-winx64\data"

# 允许最大连接数
max_connections=200

# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8mb4

# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB

[client]
#客户端编码方式,最好和服务端保存一致
loose-default-character-set=utf8mb4

[WinMySQLadmin]
Server = "E:\ProgramFiles\Database\mysql-8.0.26-winx64\bin\mysqld.exe"

QA

报错:服务无法启动

分析:检查mysqld的日志信息

问题定位成功:my.ini配置文件内的配置项有错误!!!

其他可能原因:

  • 如果执行了netstat -ano发现端口占用,则结束掉该个程序:taskkill /f /pid 程序PID
  • data目录的问题,网上有建议是先不手动创建data目录,直接执行:mysqld --initialize-insecure;

CentOS

MySQL数据包

  • Compressed TAR Archive:经过压缩、打包后的源码
  • rpm bundle:该个版本的所有包集合,把该个版本所需的所有组件都带上,其他的不带,尤其是开发包
  • rpm package:某个特定的包,类似于绿色安装

安装方式:

  • 编译好的安装包:rpm安装(mysql57-community-release-el7-10.noarch.rpm)
  • 源码包安装(gz)
  • 在线安装(YUM、APT等):yum安装(yum -y install mysql-server)

卸载

  • rpm -e mysql
  • yum -erase mysql
  • yum remove mysql

依赖

  • 检查依赖情况:rpm -qa | grep mysql
  • 移除:rpm -e 依赖名
  • 检查mariadb:rpm -qa | grep mariadb
  • 卸载mariadb:
    • rpm -e --nodeps mariadb-libs
    • rpm -e --nodeps mariadb-devel-5.5.65-1.el7.x86_64
  • 安装MySQL相关依赖:yum install libaio

源码安装

Stage1:检查是否已安装并移除:rpm -qa | grep mysql

Stage2:准备源码包

  1. 下载源码数据包:https://mirrors.tuna.tsinghua.edu.cn/mysql/downloads/MySQL-8.0/mysql-8.0.27-el7-x86_64.tar.gz
  2. 安装MySQL的依赖包:yum install libaio
  3. 上传数据包到/opt,解压:tar -zxvf mysql-8.0.27-el7-x86_64.tar.gz
  4. 赋予MySQL目录777权限:chmod -R 777 /opt/mysql8.0.27

Stage3:创建相关用户

  1. 创建mysql组和用户:groupadd mysql
  2. 创建用户:useradd -r -g mysql -s /bin/false mysql
  3. 将用户添加到用户组:chown -R mysql:mysql ./

Stage4:添加MySQL配置文件:vi /etc/my.cnf

[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=/opt/mysql8.0.27
# 设置mysql数据库的数据的存放目录
datadir=/opt/mysql8.0.27/mysqldb
# 允许最大连接数
max_connections=10000
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8mb4

Stage5:初始化

  1. 进入MySQL的bin目录,安装并且初始化:./mysqld --initialize --console #记录下产生的随机密码
  2. 切换到support-files目录:./mysql.server start
  3. 如果第一次启动,当初始化执行会有报错,重新给mysql安装目录赋予一下权限后,再次执行:chmod -R 777 /opt/mysql8.0.27
  4. 将mysql添加到系统进程中,进入support-files目录:cp mysql.server /etc/init.d/mysqld
  5. 设置mysql自启动
    • chmod +x /etc/init.d/mysqld
    • systemctl enable mysqld
    • systemctl start mysqld

Stage6:改密码

  1. 切换到bin目录:./mysql -u root -p  #输入上面产生的随机密码
  2. 改密:alter user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Hackyle.1997';
  3. 刷新:flush privileges;
  4. 退出:quit
  5. 检查状态:systemctl status mysql

其他教程参考:https://blog.csdn.net/qq_41389482/article/details/109711389

rpm安装

YUM方式安装

wget https://dev.mysql.com/get/mysql80-community-release-el7-6.noarch.rpm

yum -y install mysql80-community-release-el7-6.noarch.rpm

安装MySQL服务器:yum -y install mysql-community-server --nogpgcheck

启动MySQL服务:systemctl start mysqld.service

查看一下运行状态:systemctl status mysqld.service

查看一下初始密码:grep "password" /var/log/mysqld.log

登录mysql -uroot -p初始化密码

注意:如果有特殊字符(例如:!?),要加 \  转义,写成\! \? 才能成功识别

修改密码:ALTER USER 'root'@'localhost' IDENTIFIED BY 'Kyle.1997';

mysql默认安装了密码安全检查插件(validate_password),默认密码检查策略要求密码必须包含:大小写字母、数字和特殊符号,并且长度不能少于8位。

刷新,确保修改生效:FLUSH PRIVILEGES;

设置自动启动

  • systemctl enable mysqld
  • systemctl daemon-reload

主从环境搭建

MySQL数据的主从同步原理

主从复制过程

  1. master记录二进制日志。在每个事务更新数据完成之前,master在二日志记录这些改变。MySQL将事务写入二进制日志。在事件写入二进制日志完成后,master通知存储引擎提交事务。
  2. slave将master的binarylog拷贝到它自己的中继日志。首先,slave开始一个工作线程——I/O线程。I/O线程在master上打开一个普通的连接,然后开始binlog dump process。Binlog dump process从master的二进制日志中读取事件,如果已经同步了master,它会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志
  3. SQL slave thread(SQL从线程)处理该过程的最后一步。SQL线程从中继日志读取事件,并重放其中的事件而更新slave的数据,使其与master中的数据一致。只要该线程与I/O线程保持一致,中继日志通常会位于OS的缓存中,所以中继日志的开销很小

Windows

以zip的方式安装,主要步骤:

  1. 下载数据包:https://dev.mysql.com/downloads/mysql/
  2. 在一个合适的位置下,解压复制出两个副本

Master

  • 在MySQL的根目录下建立data目录,这个目录被用于存放数据库
  • 在根目录建立ini文件,输入MySQL的配置(注意端口号和BaseDir),见下文
  • 进入MySQL所在目录的bin目录,以管理员的权限打开cmd执行:mysqld install 服务名 ‐‐defaults‐file="安装目录\my.ini"。例如:mysqld install mysql-master01 ‐‐defaults‐file="D:\ProgramFilesKS\Database\MySQL8.0.25\master01\my.ini"

  • 以管理员的cmd,进入根目录的bin目录,执行:mysqld --initialize-insecure;注意,如果速度较慢,则直接Ctrl+C,再执行一次
  • 启动服务:net start mysql-master01

  • 连接MySQL,刚开始时密码为空,直接执行:mysql -h localhost -P 3310 -uroot -p
  • 进入到mysql后,执行:ALTER USER 'userName'@'localhost' IDENTIFIED BY 'New-Password-Here'; 例如:ALTER USER 'root'@'localhost' IDENTIFIED BY 'hackyle';

  • 没有报错,显示“Query OK, 0 rows affected (0.06 sec)”。继续执行:FLUSH PRIVILEGES;
  • 到此为止,MySQL环境搭建完毕。再次连接测试:mysql -h localhost -P 3310 -uroot -phackyle

my.ini

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4 

[mysqld]
port = 3310 

# 设置mysql的安装目录
basedir="D:\ProgramFilesKS\Database\MySQL8.0.25\master01"

# 设置mysql数据库的数据的存放目录
datadir="D:\ProgramFilesKS\Database\MySQL8.0.25\master01\data"

# 临时
tmpdir="D:\ProgramFilesKS\Database\MySQL8.0.25\master01\data"

# 允许最大连接数
max_connections=200

# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8mb4

# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB

[client]
#客户端编码方式,最好和服务端保存一致
loose-default-character-set=utf8mb4

[WinMySQLadmin]
Server = "D:\ProgramFilesKS\Database\MySQL8.0.25\master01\bin\mysqld.exe"

Slave

  • 在MySQL的根目录下建立data目录,这个目录被用于存放数据库
  • 在根目录建立ini文件,输入MySQL的配置(注意端口号和BaseDir),见下文
  • 进入MySQL所在目录的bin目录,以管理员的权限打开cmd执行:mysqld install 服务名 ‐‐defaults‐file="安装目录\my.ini"。例如:mysqld install mysql-slave01 ‐‐defaults‐file="D:\ProgramFilesKS\Database\MySQL8.0.25\slave01\my.ini"
  • 以管理员的cmd,进入根目录的bin目录,执行:mysqld --initialize-insecure;注意,如果速度较慢,则直接Ctrl+C,再执行一次
  • 启动服务:net start mysql-slave01

  • 连接MySQL,刚开始时密码为空,直接执行:mysql -h localhost -P 3311 -uroot -p
  • 进入到mysql后,执行:ALTER USER 'root'@'localhost' IDENTIFIED BY 'New-Password-Here'; 例如:ALTER USER 'root'@'localhost' IDENTIFIED BY 'hackyle';
  • 没有报错,显示“Query OK, 0 rows affected (0.06 sec)”。继续执行:FLUSH PRIVILEGES;

  • 到此为止,MySQL环境搭建完毕。再次连接测试:mysql -h localhost -P 3311 -uroot -phackyle

my.ini

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4 

[mysqld]
port = 3311 

# 设置mysql的安装目录
basedir="D:\ProgramFilesKS\Database\MySQL8.0.25\\slave01"

# 设置mysql数据库的数据的存放目录
datadir="D:\ProgramFilesKS\Database\MySQL8.0.25\\slave01\data"

# 临时
tmpdir="D:\ProgramFilesKS\Database\MySQL8.0.25\\slave01\data"

# 允许最大连接数
max_connections=200

# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8mb4

# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB

[client]
#客户端编码方式,最好和服务端保存一致
loose-default-character-set=utf8mb4

[WinMySQLadmin]
Server = "D:\ProgramFilesKS\Database\MySQL8.0.25\slave01\bin\mysqld.exe"

配置数据同步

分别连接master01和slave01,创建好需要进行主从同步的数据库:CREATE DATABASE user_db;

停止MySQL服务

  • net stop mysql-master01
  • net stop mysql-slave01
  • 或者进入服务管理控制台(msc),选中对应的服务,选择停止

在Master的my.ini中配置主库的数据同步信息

# 开启日志
log_bin=./data
# 设置服务id,主从不能一致
server_id=3310
# 设置需要同步的数据库
binlog_do_db=user_db
# 屏蔽系统库同步
binlog_ignore_db=mysql
binlog_ignore_db=information_schema
binlog_ignore_db=performance_schema

在Slave的my.ini中配置从库

log_bin=./data
# 设置服务id,主从不能一致
server_id=3311
# 设置需要同步的数据库
binlog_do_db=user_db.%
# 屏蔽系统库同步
binlog_ignore_db=mysql.%
binlog_ignore_db=information_schema.%
binlog_ignore_db=performance_schema.%

重启服务

net start mysql-master01

net start mysql-slave01

授权主从复制专用账号

相关参考文档:https://blog.csdn.net/weixin_42701376/article/details/122535000

 进入master01主库bin目录

  • 创建一个用户用于授权slave访问master的专用账号:create user 'rootslave'@'%'; #%表示设备都可登录,其他参数:%(所有ip)、localhost(本服务器)、指定的服务器ip(如652.30.145)
  • 设置密码:set password for 'rootslave'@'%'='root123';
  • 授权:grant replication slave on *.* to 'rootslave'@'%'; #给rootslave用户分配‘replication slave’权限并让他可以操作所有数据库中的所有表
  • 刷新权限:flush privileges;
  • 检查授权情况:show grants for 'rootslave'@'%';
  • 确认位点,记录下文件名以及位点:show master status;

进入从库slave01的bin目录

  • 登录:mysql -P 3311 -uroot -p
  • 先停止同步:STOP SLAVE;
  • 设置同步信息:

CHANGE MASTER TO

master_host = 'localhost',  #master服务器的IP

master_port = 3310,  #master服务器的Port

master_user = 'rootslave',  #master服务的slave账号

master_password = 'root123’,  #master的服务器密码

master_log_file = data.000003',  #这里的文件名来自【show master status;】的执行结果

master_log_pos = 1815;  #这里的数字来自【show master status;】的执行结果

实例:
CHANGE MASTER TO master_host='localhost',master_port=3310,master_user='rootslave',master_password='root123',master_log_file='data.000003',master_log_pos=1815;
  • 启动同步:START SLAVE;
  • 查看从库状态:show slave status\G

查看从库状态Slave_IO_Runing和Slave_SQL_Runing都为Yes说明同步成功,如果不为Yes,仔细检查输出的其他信息,根据报错信息来排查问题所在点

注意:如果之前此备库已有主库指向,需要先执行以下命令清空

  • STOP SLAVE IO_THREAD FOR CHANNEL '';
  • reset slave all;

测试

在master01上进行DML,在slave01上进行DQL,可以查询到在master01上操作过的DML

master01

CREATE TABLE user(
    id BIGINT AUTO_INCREMENT PRIMARY KEY,

    name VARCHAR(16) DEFAULT NULL,
    update_time DATETIME DEFAULT now() ON UPDATE now()
);

INSERT INTO user(name) VALUES ('aaa'),('bbb'),('ccc');

slave01

select * from user;

QA

执行mysqld --initialize-insecure报错

mysqld: Can't get stat of 'D:\ProgramFilesKS\Database\MySQL8.0.25 lave01\data' (OS errno 2 - No such file or directory)

分析:根据报错信息,发现这里路径不完整,应该是路径分隔符导致的问题

解决:修改my.ini的路径

重新安装服务时报错:The service already exists!

解决方案:sc delete 服务名(例如:sc delete mysql-master01)

报错:服务无法启动

分析:检查mysqld的日志信息

问题定位成功:my.ini配置文件内的配置项有错误!!!

其他可能原因:

  • 如果执行了netstat -ano发现端口占用,则结束掉该个程序:taskkill /f /pid 程序PID
  • data目录的问题,先删除data目录,直接执行:mysqld --initialize-insecure;再启动:net start mysql-slave01

CentOS

请先实践CentOS环境下的单机安装,再仔细阅读Windows环境下的主从安装,一定可以实现在CentOS环境下的主从安装

 

————————————————
版权声明:非明确标注皆为原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上本文链接及此声明。
原文链接:https://blog.hackyle.com/article/mysql/mysql-install

留下你的评论

Name: 

Email: 

Link: 

TOP