本实验安装环境
操作系统为centos7.9最小化安装
关闭防火墙 内核
- [root@localhost ~]# systemctl stop firewalld
- [root@localhost ~]# systemctl disable firewalld
- Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
- Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
- [root@localhost ~]# setenforce 0
安装上传包
[root@localhost ~]# yum -y install lrzsz
备份原有repo文件,使用网易源
- [root@localhost ~]# mkdir -p /etc/yum.repos.d/bak
- [root@localhost ~]# mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/
- [root@localhost ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo --create-dirs http://mirrors.163.com/.help/CentOS7-Base-163.repo
- [root@localhost ~]# yum clean all
- [root@localhost ~]# yum makecache
- [root@localhost ~]# yum repolist
卸载自带的mysql和mariadb相关的rpm包
- [root@localhost ~]# rpm -qa |grep mysql
- [root@localhost ~]# rpm -qa |grep mariadb
- mariadb-libs-5.5.68-1.el7.x86_64
- [root@localhost ~]# rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64
安装依赖
[root@localhost ~]# yum install -y cmake make gcc gcc-c++ openssl openssl-devel ncurses ncurses-devel bison bison-devel
下载安装包 mysql-MySQL-5.7安装包下载_开源镜像站-阿里云 (aliyun.com)
安装包拖入系统
- [root@localhost ~]# ls
- anaconda-ks.cfg mysql-boost-5.7.37.tar.gz
解压
- [root@localhost ~]# tar -zxvf mysql-boost-5.7.37.tar.gz -C /usr/src
- [root@localhost ~]# cd /usr/src/mysql-5.7.37/
编译安装
编译参数
- [root@localhost mysql-5.7.37]# cmake \
- > -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
- > -DMYSQL_DATADIR=/usr/local/mysql/data \
- > -DSYSCONFDIR=/usr/local/mysql/etc \
- > -DWITH_INNOBASE_STORAGE_ENGINE=ON \
- > -DWITH_MYISAM_STORAGE_ENGINE=ON \
- > -DDEFAULT_CHARSET=utf8 \
- > -DDEFAULT_COLLATION=utf8_general_ci \
- > -DENABLED_LOCAL_INFILE=ON \
- > -DMYSQL_TCP_PORT=3306 \
- > -DMYSQL_UNIX_ADDR=/usr/local/mysql/tmp/mysql.sock \
- > -DWITH_INNODB_MEMCACHED=ON \
- > -DWITH_BOOST=boost/boost_1_59_0
相关编译参数解释,更多解释:https://dev.mysql.com/doc/refman/5.7/en/source-configuration-options.html
- -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ #指定MySQL安装目录
- -DMYSQL_DATADIR=/usr/local/mysql/data \ #指定MySQL数据目录
- -DSYSCONFDIR=/usr/local/mysql/etc \ #指定my.cnf选项文件目录
- -DWITH_INNOBASE_STORAGE_ENGINE=ON\ #Innodb引擎
- -DWITH_MYISAM_STORAGE_ENGINE=ON \ #MyISAM引擎
- -DDEFAULT_CHARSET=utf8 \ #服务器字符集,默认latin1
- -DDEFAULT_COLLATION=utf8_general_ci \ #服务器排序规则,默认latin1_swedish_ci
- -DENABLED_LOCAL_INFILE=ON \ #是否为加载数据启用本地,默认为OFF
- -DMYSQL_TCP_PORT=3306 \ #服务器监听端口,默认为3306
- -DMYSQL_UNIX_ADDR=/usr/local/mysql/tmp/mysql.sock \ #Unix套接字文件路径,默认/tmp/mysql.sock
- -DWITH_INNODB_MEMCACHED=ON \ #是否生成memcached共享库,默认OFF
- -DWITH_BOOST=boost/boost_1_59_0 #Boost库源代码的位置,指向下载的源码包里,相对/绝对路径皆可
编译安装 使用4个核心编译
[root@localhost mysql-5.7.37]# make && make install 或 make -j4 && make install
创建用户,目录,授权
- [root@localhost mysql-5.7.37]# groupadd mysql
- [root@localhost mysql-5.7.37]# useradd -r -g mysql -s /bin/false mysql
- [root@localhost mysql-5.7.37]# cd /usr/local/mysql
- [root@localhost mysql]# mkdir -p /usr/local/mysql/data
- [root@localhost mysql]# mkdir -p /usr/local/mysql/etc
- [root@localhost mysql]# mkdir -p /usr/local/mysql/tmp
- [root@localhost mysql]# mkdir -p /usr/local/mysql/logs
- [root@localhost mysql]# chown -R mysql:mysql /usr/local/mysql
编辑配置文件
[root@localhost mysql]# vim /usr/local/mysql/etc/my.cnf
- [client] #客户端设置
- port=3306 #服务器监听端口,默认为3306
- socket=/usr/local/mysql/tmp/mysql.sock #Unix套接字文件路径,默认/tmp/mysql.sock
-
- [mysqld] #服务端设置
- ## 一般配置选项
- port=3306 #服务器监听端口,默认为3306
- basedir=/usr/local/mysql #MySQL安装根目录
- datadir=/usr/local/mysql/data #MySQL数据文件目录
- socket=/usr/local/mysql/tmp/mysql.sock #Unix套接字文件路径,默认/tmp/mysql.sock
- pid-file=/usr/local/mysql/tmp/mysql.pid #服务进程pid文件路径
- character_set_server=utf8 #默认字符集
- default_storage_engine=InnoDB #默认InnoDB存储引擎
- user=mysql
-
- ## 连接配置选项
- max_connections=200 #最大并发连接数
- table_open_cache=400 #表打开缓存大小,默认2000
- open_files_limit=1000 #打开文件数限制,默认5000
- max_connect_errors=200 #最大连接失败数,默认100
- back_log=100 #请求连接队列数
- connect_timeout=20 #连接超时时间,默认10秒
- interactive_timeout=1200 #交互式超时时间,默认28800秒
- wait_timeout=600 #非交互超时时间,默认28800秒
- net_read_timeout=30 #读取超时时间,默认30秒
- net_write_timeout=60 #写入超时时间,默认60秒
- max_allowed_packet=8M #最大传输数据字节,默认4M
- thread_cache_size=10 #线程缓冲区(池)大小
- thread_stack=256K #线程栈大小,32位平台196608、64位平台262144
-
- ## 临时内存配置选项
- tmpdir=/tmp #临时目录路径
- tmp_table_size=64M #临时表大小,默认16M
- max_heap_table_size=64M #最大内存表大小,默认16M
- sort_buffer_size=1M #排序缓冲区大小,默认256K
- join_buffer_size=1M #join缓冲区大小,默认256K
-
- ## Innodb配置选项
- #innodb_thread_concurrency=0 #InnoDB线程并发数
- innodb_io_capacity=200 #IO容量,可用于InnoDB后台任务的每秒I/O操作数(IOPS),
- innodb_io_capacity_max=400 #IO最大容量,InnoDB在这种情况下由后台任务执行的最大IOPS数
- innodb_lock_wait_timeout=50 #InnoDB引擎锁等待超时时间,默认50(单位:秒)
-
- innodb_buffer_pool_size=512M #InnoDB缓冲池大小,默认128M
- innodb_buffer_pool_instances=4 #InnoDB缓冲池划分区域数
- innodb_max_dirty_pages_pct=75 #缓冲池最大允许脏页比例,默认为75
- innodb_flush_method=O_DIRECT #日志刷新方法,默认为fdatasync
- innodb_flush_log_at_trx_commit=2 #事务日志刷新方式,默认为0
- transaction_isolation=REPEATABLE-READ #事务隔离级别,默认REPEATABLE-READ
-
- innodb_data_home_dir=/usr/local/mysql/data #表空间文件路径,默认保存在MySQL的datadir中
- innodb_data_file_path=ibdata1:128M:autoextend #表空间文件大小
- innodb_file_per_table=ON #每表独立表空间
-
- innodb_log_group_home_dir=/usr/local/mysql/data #redoLog文件目录,默认保存在MySQL的datadir中
- innodb_log_files_in_group=2 #日志组中的日志文件数,默认为2
- innodb_log_file_size=128M #日志文件大小,默认为48MB
- innodb_log_buffer_size=32M #日志缓冲区大小,默认为16MB
-
- ## MyISAM配置选项
- key_buffer_size=32M #索引缓冲区大小,默认8M
- read_buffer_size=4M #顺序读缓区冲大小,默认128K
- read_rnd_buffer_size=4M #随机读缓冲区大小,默认256K
- bulk_insert_buffer_size=8M #块插入缓冲区大小,默认8M
- myisam_sort_buffer_size=8M #MyISAM排序缓冲大小,默认8M
- #myisam_max_sort_file_size=1G #MyISAM排序最大临时大小
- myisam_repair_threads=1 #MyISAM修复线程
- skip-external-locking #跳过外部锁定,启用文件锁会影响性能
-
- ## 日志配置选项
- log_output=FILE #日志输出目标,TABLE(输出到表)、FILE(输出到文件)、NONE(不输出),可选择一个或多个以逗>号分隔
- log_error=/usr/local/mysql/logs/error.log #错误日志存放路径
- log_error_verbosity=1 #错误日志过滤,允许的值为1(仅错误),2(错误和警告),3(错误、警告和注释),默认值为3。
- log_timestamps=SYSTEM #错误日志消息格式,日志中显示时间戳的时区,UTC(默认值)和 SYSTEM(本地系统时区)
- general_log=ON #开启查询日志,一般选择不开启,因为查询日志记录很详细,会增大磁盘IO开销,影响性能
- general_log_file=/usr/local/mysql/logs/general.log #通用查询日志存放路径
-
- ## 慢查询日志配置选项
- slow_query_log=ON #开启慢查询日志
- slow_query_log_file=/usr/local/mysql/logs/slowq.log #慢查询日志存放路径
- long_query_time=2 #慢查询时间,默认10(单位:秒)
- min_examined_row_limit=100 #最小检查行限制,检索的行数必须达到此值才可被记为慢查询
- log_slow_admin_statements=ON #记录慢查询管理语句
- log_queries_not_using_indexes=ON #记录查询未使用索引语句
- log_throttle_queries_not_using_indexes=5 #记录未使用索引速率限制,默认为0不限制
- log_slow_slave_statements=ON #记录从库复制的慢查询,作为从库时生效,从库复制中如果有慢查询也将被记录
-
- ## 复制配置选项
- server-id=1 #MySQL服务唯一标识
- log-bin=mysql-bin #开启二进制日志,默认位置是datadir数据目录
- log-bin-index=mysql-bin.index #binlog索引文件
- binlog_format=MIXED #binlog日志格式,分三种:STATEMENT、ROW或MIXED,MySQL 5.7.7之前默认为STATEMENT,之后默认为ROW
- binlog_cache_size=1M #binlog缓存大小,默认32KB
- max_binlog_cache_size=1G #binlog最大缓存大小,推荐最大值为4GB
- max_binlog_size=256M #binlog最大文件大小,最小值为4096字节,最大值和默认值为1GB
- expire_logs_days=7 #binlog过期天数,默认为0不自动删除
- log_slave_updates=ON #binlog级联复制
- sync_binlog=1 #binlog同步频率,0为禁用同步(最佳性能,但可能丢失事务),为1开启同步(影响性能,但最安全不会丢失任何事务),为N操作N次事务后同步1次
-
- relay_log=relay-bin #relaylog文件路径,默认位置是datadir数据目录
- relay_log_index=relay-log.index #relaylog索引文件
- max_relay_log_size=256M #relaylog最大文件大小
- relay_log_purge=ON #中继日志自动清除,默认值为1(ON)
- relay_log_recovery=ON #中继日志自动恢复
-
- auto_increment_offset=1 #自增值偏移量
- auto_increment_increment=1 #自增值自增量
- slave_net_timeout=60 #从机连接超时时间
- replicate-wild-ignore-table=mysql.% #复制时忽略的数据库表,告诉从线程不要复制到与给定通配符模式匹配的表
- skip-slave-start #跳过Slave启动,Slave复制进程不随MySQL启动而启动
-
- ## 其他配置选项
- #memlock=ON #开启内存锁,此选项生效需系统支持mlockall()调用,将mysqld进程锁定在内存中,防止遇到操作系统导致mysqld交换到磁盘的问题
-
- [mysqldump] #mysqldump数据库备份工具
- quick #强制mysqldump从服务器查询取得记录直接输出,而不是取得所有记录后将它们缓存到内存中
- max_allowed_packet=16M #最大传输数据字节,使用mysqldump工具备份数据库时,某表过大会导致备份失败,需要增大该值(大>于表大小即可)
-
- [myisamchk] #使用myisamchk实用程序可以用来获得有关你的数据库表的统计信息或检查、修复、优化他们
- key_buffer_size=32M #索引缓冲区大小
- myisam_sort_buffer_size=8M #排序缓冲区大小
- read_buffer_size=4M #读取缓区冲大小
- write_buffer_size=4M #写入缓冲区大小
初始化数据库
[root@localhost mysql]# /usr/local/mysql/bin/mysqld --defaults-file=/usr/local/mysql/etc/my.cnf --initialize --user=mysql
配置环境变量 在最后添加以下两行
- [root@localhost mysql]# vi /etc/profile
- export MYSQL_HOME=/usr/local/mysql
- export PATH=$MYSQL_HOME/bin:$PATH
使环境变量即时生效
[root@localhost mysql]# source /etc/profile
配置系统服务
[root@localhost mysql]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
重新加载系统服务配置
[root@localhost mysql]# systemctl daemon-reload
启动mysql服务,添加开机启动项并配置开机启动
- [root@localhost mysql]# systemctl restart mysql
- [root@localhost mysql]# /sbin/chkconfig mysql on
- [root@localhost mysql]# chkconfig -add mysql 此问题未知 不影响使用
- -add: 未知的选项
查看开机密码root@localhost:后为密码
- [root@localhost mysql]# cat /usr/local/mysql/logs/error.log |grep password
- 2022-09-17T23:02:49.845380+08:00 1 [Note] A temporary password is generated for root@localhost: fJf9MJqs)WZt
进入数据库
- [root@localhost mysql]# mysql -uroot -p
- Enter password: 密码
修改开机密码
- mysql> set password="1";
- Query OK, 0 rows affected (0.00 sec)
数据库基本操作
查看数据库
- mysql> show databases;
- +--------------------+
- | Database |
- +--------------------+
- | information_schema |
- | mysql |
- | performance_schema |
- | sys |
- +--------------------+
- 4 rows in set (0.00 sec)
创建数据库,数据库名称为NBclass,字符集为utf8
- mysql> create database NBclass character set utf8;
- Query OK, 1 row affected (0.00 sec)
切换到NBclass数据库,创建表,表名称为NBtables,表中包含3列,分别是pid列,name列和tel列,这三列可填充的数据类型为INT型----整数型,CHAR(20)----固定长度为20的字符串和INT型----整数型
- mysql> use NBclass;
- Database changed
-
- mysql> create table NBtables(pid INT,name CHAR(20),tel INT);
- Query OK, 0 rows affected (0.01 sec)
查看表名称,查看表详细信息,不包含表中数据,NBtables为刚才创建的表名称
- mysql> show tables;
- +-------------------+
- | Tables_in_NBclass |
- +-------------------+
- | NBtables |
- +-------------------+
- 1 row in set (0.00 sec)
-
- mysql> show create table NBtables;
- +----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+
- | Table | Create Table |
- +----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+
- | NBtables | CREATE TABLE `NBtables` (
- `pid` int(11) DEFAULT NULL,
- `name` char(20) DEFAULT NULL,
- `tel` int(11) DEFAULT NULL
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
- +----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+
- 1 row in set (0.01 sec)
在表中插入数据,pid列插入数据"1",name列插入数据"王大锤",tel列插入数据“66668888”
- mysql> insert into NBtables values("1","王大锤","66668888");
- Query OK, 1 row affected (0.01 sec)
再次插入数据2,小李飞刀,99999999
- mysql> insert into NBtables values("2","小李飞刀","999988888");
- Query OK, 1 row affected (0.00 sec)
查看NBtables表的所有数据
- mysql> select * from NBtables;
- +------+--------------+-----------+
- | pid | name | tel |
- +------+--------------+-----------+
- | 1 | 王大锤 | 66668888 |
- | 2 | 小李飞刀 | 999988888 |
- +------+--------------+-----------+
- 2 rows in set (0.00 sec)
完成