MySQL安装
目录
MySQL 是最好的 RDBMS(Relational Database Management System:关系数据 库管理系统)应用软件之一。
1 二进制安装
本安装MySQL是预编译的MySQL 的二进制分发版。已经针对 Linux 发行版进行了预编译,使用的二进制文件是后缀为.tar.gz
的压缩文件
1.1 安装依赖
apt-get install libncurses5
解决mysql -u root -p
时出现错误
mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory
1.2 创建用户
创建 mysql 的用户组和用户
groupadd --system mysql
useradd --system -g mysq -s /sbin/nologin -c "MySQL Server" mysql
1.3 下载并解压
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.32-linux-glibc2.12-x86_64.tar.gz
解压缩到 /usr/local/ 下面,mysql 的主目录命名为 mysql
tar zxf mysql-5.7.32-linux-glibc2.12-x86_64.tar.gz
mv mysql-5.7.32-linux-glibc2.12-x86_64 /usr/local/mysql
1.4 创建数据目录
在 mysql 下面创建数据库文件目录
mkdir -p /usr/local/mysql/{data,logs}
chown -R mysql:mysql /usr/local/mysql
1.5 配置 my.cnf
vi /usr/local/mysql/my.cnf
chown mysql:mysql /usr/local/mysql/my.cnf
根据需要增减配置
[mysqld]
# dir
basedir = /usr/local/mysql #Mysql安装路径
datadir = /data/mysql/data #Mysql数据存放路径
log-error = /data/mysql/logs/error.log #mysql生成的错误日志
#slow_query_log_file = /data/mysql/logs/slow.log
#general_log_file = /data/mysql/logs/general.log
#event_scheduler = 1 #开启事件调度器
# innodb
#innodb_data_home_dir = #InnoDB所有共享表空间数据文件的目录路径。
#innodb_data_file_path = ibdata1:12M;/data/mysql/ibdata2:12M:autoextend #指定InnoDB的各个数据文件及其大小,文件多于一个时彼此间用分号隔开。
#innodb_buffer_pool_size = 512M #innodb缓存区大小
# server
user = mysql
port = 3306
skip-ssl #禁用ssl
skip-name-resolve #禁用dns解析
character_set_server = utf8mb4 #默认字符集
collation_server = utf8mb4_bin #默认排序规则
default-time-zone = '+08:00' #默认时区
default-storage-engine = INNODB #默认存储引擎INNODB
#lower_case_table_names = 1 #不区分大小写
#slow_query_log = 1 #开启慢查询日志
#long_query_time = 10 #指定多少秒返回查询的结果为慢查询,单位秒。默认为10秒
#general_log = 0 #关闭通用日志
#sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
# binlog
#log-bin = /data/mysql/logs/binlog/mysql-bin #二进制日志,binlog用于记录用户对数据库操作的SQL语句信息(值 mysql-bin 是日志的基本名或前缀名)
#server-id = 1
#binlog-format = ROW
#expire_logs_days = 30 #保留30天
#max_binlog_size = 100M #binlog每个日志文件大小
1.6 配置环境变量
将MySQL命令添加环境变量
#set mysql environment
export MYSQL_HOME=/usr/local/mysql
export PATH=${PATH}:${MYSQL_HOME}/bin
source /etc/profile
1.7 初始化 mysql
mysqld --defaults-file=/usr/local/mysql/my.cnf --initialize
使用指定的
my.cnf
需要将--defaults-file
放在命令后的第一位参数传入将
--initialize
选项放在命令的最后,命令行选项的顺序会影响其解析
在 log-error 中可以看到临时密码
grep 'temporary password' /data/mysql/logs/error.log
1.8 配置服务并启动
配置服务,使用systemctl
管理
vi /usr/lib/systemd/system/mysql.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(5.7)
Documentation=https://dev.mysql.com/doc/refman/5.7/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
Alias=mysql.service
[Service]
User=mysql
Group=mysql
Type=forking
# Disable service start and stop timeout logic of systemd for mysqld service.
TimeoutSec=5
# Execute pre and post scripts as root
PermissionsStartOnly=true
# Start main service
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/usr/local/mysql/my.cnf --daemonize
Restart=on-failure
RestartPreventExitStatus=1
PrivateTmp=false
1.9 启动服务
systemctl start mysql.service
使用临时密码登陆并修改密码
mysql -uroot -p
修改MySQL的root密码,新密码在此为root
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';
1.10 数据库授权
mysql> grant [权限1,权限2,权限3] on *.* to user@'host' identified by 'password'
常用权限:all privileges、create、drop、select、insert、delete、update
赋予所有权限允许远程连接
mysql> grant all privileges on *.* to 'root'@'%' identified BY 'root' with grant option;
mysql> flush privileges;
- all privileges:表示将所有权限授予给用户。也可指定具体的权限,如:SELECT、CREATE、DROP等。
- on:表示这些权限对哪些数据库和表生效,格式:数据库名.表名,这里写"*“表示所有数据库,所有表。如果我要指定将权限应用到test库的user表中,可以这么写:test.user
- to:将权限授予哪个用户。格式:“用户名”@“登录IP或域名”。%表示没有限制,在任何主机都可以登录。比如:‘root’@‘192.168.1.%’,表示root这个用户只能在192.168.0.* IP段登录
- with grant option:通过在grant语句的最后使用该子句,就允许被授权的用户把得到的权限继续授给其它用户
2 容器启动
docker run -d \
--name mysql \
-e MYSQL_DATABASE=db \
-e MYSQL_ROOT_PASSWORD=root \
-e TZ=Asia/Shanghai \
-v /data/mysql/data:/var/lib/mysql \
mysql:5.7.32 \
--skip-ssl \
--default-time-zone=+8:00 \
--lower_case_table_names=1 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci