考古一下如何搭建可用的mysql环境
# 引言
关于该如何安装mysql环境,资料一搜一大堆;不过今天就是想考古一下了,看看文档是咋说的。
# 先从Anolis8.6上安装mysql
这里就不用社区版了,就是考虑在这个操作系统环境下,龙蜥发行者发布的rpm包应该会有更好的稳定性。命令:yum -y install mysql-server

这个操作就不考古了啊,没必要,只要启动起来后能监听3306端口就是对的。
# 看看文档
既然我这里安装的是8.0.4,就去看8.0的文档了,
链接为https://dev.mysql.com/doc/refman/8.0/en/,页面这样:
从这里看,安装完就该是“安装后的设置和测试”这一部分了:
安装后的设置和测试这一部分,页面这个样:
这个页面说,安装完之后,需要:
- 初始化数据目录(有些版本安装时已经初始化好了)、创建MySQL grant tables
- 打开msyql server,确认能连接到服务
- 指定root用户的密码,这个密码就是保存到MySQL grant tables里
- 可以选择设置mysql server是否开机启动
- 可以选择向“time zone tables”添加数据,以便mysql server识别时区
做完这些,要去看8.2节,权限控制和账户管理:“Access Control and Account Management”,
https://dev.mysql.com/doc/refman/8.0/en/access-control.html
初始化数据目录的页面说啥了
我这里就干脆看到啥就写点啥了,
内容都是从页面https://dev.mysql.com/doc/refman/8.0/en/postinstallation.html看到的。
- 如果不是安装时就自动初始化好的那种版本,就得手动初始化数据目录。
- mysql server是用mysql用户运行的
- mysql的世界里有个环境变量叫secure_file_priv,相关知识在:
https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_secure_file_priv
说,mysql根据这个变量限制导入导出操作的目录范围,只有对目录有权限的用户才能操作
- 需要准备一个目录,属于mysql:mysql,文件权限750
- 初始化命令为bin/mysqld --initialize --user=mysql
- 如果要使用安全连接,可以使用msyql_ssl_rsa_setup工具,链接在:
https://dev.mysql.com/doc/refman/8.0/en/mysql-ssl-rsa-setup.html
- 如果启动时不指定配置文件,则有一些默认配置;也可以使用配置文件
初始化数据目录的步骤:
如果使用--initialize,会自动创建一个随机的root用户密码
如果使用--initialize-insecure,则不会创建root密码,这意味着你要在server投入使用前及时指定一个root密码
可以这样指定basedir和datadir:

basedir指定的是msyql安装的基础路径,比如我这个用rpm包安装的,basedir为/usr:

数据目录初始化时发生了什么
数据目录出初始化,就是执行时加了 --initialize or --initialize-insecure 选项
1. 检查数据目录是否存在,如果没有就创建
-
2. 在数据目录里创建一些表,以保存msyql server运行时需要的信息
原文:Within the data directory, the server creates the mysql system schema and its tables, including the data dictionary tables, grant tables, time zone tables, and server-side help tables.
什么是mysql system schema?
链接https://dev.mysql.com/doc/refman/8.0/en/system-schema.html
mysql system schema是一些表,它们包含一些msyql server运行时需要的信息。更宽泛的说法,mysql schema包含:保存数据库对象元信息的数据字典表,以及一些其它的系统使用的表。
3. 初始化管理InnoDB tables相关的东东,比如ibdata files
原文:The server initializes the system tablespace and related data structures needed to manage InnoDB tables.
什么是 InnoDB tables?
链接为https://dev.mysql.com/doc/refman/8.0/en/innodb-storage-engine.html
InnoDB是一个存储引擎,设计目的是在可靠性和高性能之间找到一个平衡。InnoDB是MySQL 8.0的默认存储引擎,只要没做特殊配置或在建表时特殊声明,CREATE TABLE子句就是创建InnoDB表。
什么是system tablespace?就是一个或多个ibdata files
链接为https://dev.mysql.com/doc/refman/8.0/en/glossary.html#glos_system_tablespace
system tablespace由一个或多个ibdata files构成,ibdata file包含了InnoDB相关对象的元数据、以及change buffer和doublewrite buffer的存储区,也包含InnoDB tables的表数据、索引数据
chang buffer是记录增删改操作相关的数据结构,doublewrite是InnoDB使用的一个文件缓冲技术,InnoDB在把pages写到data files之前,先写到doublewrite buffer,写入doublewrite buffer完成后,InnoDB才把pages写到data files。更多可以去看mysql词汇表,链接为https://dev.mysql.com/doc/refman/8.0/en/glossary.html
这里我们知道是初始化管理InnoDB tables相关的东东,比如ibdata files,先不细挖了,继续。
4. 创建超级用户'root'@'localhost'以及一些保留账号
5. 向帮助相关的表里填充内容
6. 可以在初始化时指定执行某个包含SQL statements的文件
注意,因为还在初始化mysql server,所以有些功能还不能使用,所以文件里包含的statements可能受到限制
7. 至此,数据目录初始化操作就结束了
可以启动mysql server服务,测试可用性了。总结一下,想要用anolis8.6搞一个只给本机使用的mysql服务,最基本的步骤就是这些:
1. 使用官方源,yum -y install mysql-server
2. 编辑/etc/my.cnf.d/mysql-server.cnf,修改datadir的配置
3. 创建datadir的上一级目录
4. 初始化数据目录
5. 启动服务、指定root密码
6. 测试是否可用。
# 实际操作一下
现在,我们就着从Anolis8.6上使用官方源yum -y install mysql-server之后的环境,操作一遍看是否符合期望。首先编辑/etc/my.cnf.d/mysql-server.cnf,修改datadir的配置。
为何修改/etc/my.cnf.d/mysql-server.cnf有效?我们执行mysqld --verbose --help 可以看到这个:
而/etc/my.cnf里有这样一个includedir指令:
这是我修改之后的,只改了箭头指向的这一行,之所以单独改这个,是考虑这是很可能是刚需:
创建datadir的上一级目录
就这么默认创建了,不行再说:
初始化数据目录前,看看我的环境:
这是我现在环境上的mysqld命令所在的位置:
这是我现在环境上去掉了注释后的/usr/lib/systemd/system/mysqld.service :
系统上已经有一个叫mysql的用户了:
初始化数据目录
结合上文可以指定basedir的说法,我就用这个命令了:
mysqld --initialize-insecure --user=mysql --basedir=/usr![]()

可以看到/data/var/的权限和属主属组都没有变化,新创建了mysql/目录
启动服务

连接到服务器、指定root密码
mysql -u root --skip-password
刚才的2步操作都是参考https://dev.mysql.com/doc/refman/8.0/en/data-directory-initialization.html
看看搭建的环境:
## 从本机连没有问题

## 试试网站上说的

先这样了,后边写python代码连mysql服务记录数据,可能还需要修改环境的配置,比如监听127.0.0.1这种,如果有别的收获,再分享。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)