Install MySQL

Linux(Generic)

https://dev.mysql.com/downloads/mysql/ & https://dev.mysql.com/doc/refman/8.0/en/binary-installation.html & https://dev.mysql.com/doc/refman/8.0/en/using-systemd.html

curl -LOJ https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.41-linux-glibc2.28-x86_64.tar.xz
tar -xf mysql-8.0.41-linux-glibc2.28-x86_64.tar.xz -C /usr/local/
cd /usr/local/ && mv mysql-8.0.41-linux-glibc2.28-x86_64 mysql
cd /usr/local/mysql

sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql # 创建不具有服务器主机登录权限的用户
sudo chown -R mysql:mysql /usr/local/mysql
sudo mkdir mysql-files # 将导入和导出操作限制到特定目录
sudo chown mysql:mysql mysql-files && sudo chmod 750 mysql-files

sudo bin/mysqld --initialize --user=mysql
# sudo bin/mysql_ssl_rsa_setup
sudo bin/mysqld_safe --user=mysql &

# Next command is optional
sudo cp support-files/mysql.server /etc/init.d/mysqld
# sudo chmod +x /etc/init.d/mysqld
# 添加系统服务
# CentOS/RHEL:
sudo chkconfig --add mysqld
sudo chkconfig --level 345 mysqld on
sudo chkconfig --list
sudo service mysqld start
sudo service mysqld status
# Debian/Ubuntu:
sudo update-rc.d mysqld defaults

# export PATH=$PATH:/usr/local/mysql/bin
sudo sh -c 'echo "export PATH=\\"$PATH:/usr/local/mysql/bin\\"" >> /etc/profile'
source /etc/profile

 

Linux(Yum)

https://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/https://dev.mysql.com/downloads/repo/yum

Linux 用 rpm 包安装的 MySQL 没有 /etc/my.cnf 文件,默认用 /usr/share/mysql/my-medium.cnf,复制 /usr/share/mysql 目录下的 .cnf 文件到 /etc 目录,并改名为 my.cnf 即可。注:修改 datadir 路径可能会服务启动失败,关闭 selinux 即可。

# 安装源,会在 /etc/yum.repos.d/ 下生成 mysql-community.repo 和 mysql-community-source.repo 文件
sudo rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-4.noarch.rpm
# 查看 yum 源中是否有 mysql 安装包
sudo yum repolist all | grep mysql
# 安装管理工具
sudo yum install -y yum-utils

# 禁用 mysql 8.0
sudo yum-config-manager --disable mysql80-community
# 启用 mysql 5.7
sudo yum-config-manager --enable mysql57-community
# 安装
sudo yum install -y mysql-community-server

# 开启服务
sudo systemctl start mysqld.service
# 开机自启动
sudo systemctl enable mysqld.service
# 检查 MySQL 服务器的状态
sudo systemctl status mysqld.service
# 查看端口
netstat -ln | grep 3306
# 从日志文件中获取 root 账户初始密码
grep "password" /var/log/mysqld.log

 

Windows

https://dev.mysql.com/downloads/mysql & 历史版本:https://downloads.mysql.com/archives/community

若找不到 dll 则需要安装 c++ 运行库:https://www.microsoft.com/zh-CN/download/details.aspx?id=40784

解压下载的 mysql 压缩包,若需要,可在 mysql 的根目录创建配置文件 my.ini,bin 目录下以管理员权限打开 cmd 进行安装操作

:: --initialize 创建数据文件目录和 mysql 系统数据库,产生的随机 root 密码在 data/*.err 文件中搜索 password 会看到,--console 写错误日志到 console window 平台
mysqld --initialize --console

:: 命令方式启动
mysqld --console

:: 安装服务
mysqld -install
:: 服务方式启动
net start mysql

:: 连接到本机 MySQL
mysql -u root -p

:: 停止 mysql
mysqladmin -uroot -proot shutdown
echo shutdown; | mysql -u root -proot

:: 卸载
net stop mysql
mysqld --remove mysql

 

初始化服务

# 安全向导,初始化服务,直接用该密码登陆会要求改密码,最好先进行向导操作
mysql_secure_installation

# 输入 root 初始密码,初始密码中有特殊字符时需转义
Enter password for user root:
# 设置新密码,密码太简单会提示错误:Your password does not satisfy the current policy requirements
New password
# 是否确认修改 root 密码
Change the password for root
# 是否删除匿名用户
Remove anonymous users
# 是否禁止 root 远程登录
Disallow root login remotely
# 是否删除 test 数据库
Remove test database and access to it
# 是否现在刷新权限
Reload privilege tables now

 

远程连接

use mysql;
-- 修改指定用户登录位置,% 为任意地址,可配置指定 IP
update user set host='%' where user='root';
select host,user from user;
-- 创建用户(user1 为用户名,% 为登陆地址任意 ip,也可指定,123456 为登录密码)
CREATE USER 'user1'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
-- 默认创建的用户是无权限,只能登录而已,(all:所有权限,有 select,update 等等权限,后面的 *.*:指定数据库.指定表,这里指所有,to 后面是用户)
grant all on *.* to 'user1'@'%';

-- 刷新权限
flush privileges;

Windows 开放防火墙 3306 端口

输入要开放的端口,一直下一步就行

Linux 开放 3306 端口或关闭防火墙

# iptables
# 开放端口
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
# 保存配置
service iptables save

# firewalld
# 开放端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
# 重启 firewall
firewall-cmd --reload
# 查看已开放端口
firewall-cmd --list-ports

# 关闭防火墙
systemctl stop firewalld.service
# 关闭开机自启
systemctl disable firewalld.service

 

修改密码

5.7 免密

sudo vim /etc/my.cnf
skip-grant-tables

sudo systemctl restart mysqld.service

8.0 免密

# 在配置中添加 skip-grant-tables 在 mysql 8 已失效
# 命令方式启动
mysqld --console --skip-grant-tables --shared-memory

清空密码

-- 登陆 mysql,不用密码
mysql -uroot

-- 清空指定账户密码
use mysql;
update user set authentication_string = '' where user = 'root';
-- 退出 mysql,删除 skip-grant-tables,重启 mysql,用空密码登陆,然后进行修改密码操作

设置简单密码,官方 在新版本中对密码设置要求比较严格

-- 查看密码策略
SHOW VARIABLES LIKE 'validate_password%';

-- 修改密码策略,修改密码检查强度和密码长度就可以
-- 8.0 之前
set global validate_password_policy=0;
set global validate_password_length=4;
-- 8.0 之后
set global validate_password.policy=0;
set global validate_password.length=4;

-- 修改当前用户密码
ALTER USER USER() IDENTIFIED BY '123456';
-- 修改指定用户密码
ALTER user 'root'@'localhost' IDENTIFIED BY '123456';
-- 修改登陆密码和加密规则,8 版本默认的认证插件为 Caching_sha2_password,原来是 mysql_native_password,不修改 Navicat 等工具连接会认证失败
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';

flush privileges;

 

配置

[client]
default-character-set = utf8mb4

[mysql]
# 启用自动补全
auto-rehash
default-character-set = utf8mb4

[mysqld]
port = 3306
# 设置 mysql 的安装目录
basedir = 
# 设置 mysql 数据库的数据的存放目录,默认 basedir/data
datadir = 
# 字符集:https://dev.mysql.com/doc/refman/8.4/en/charset.html
character-set-server = utf8mb4
init_connect = 'SET NAMES utf8mb4'
# 8.0 之前
#character-set-client-handshake = false
#skip-character-set-client-handshake = true
# 排序规则
collation-server = utf8mb4_unicode_ci
# 0 大小写敏感(Linux 默认),1 大小写不敏感(Windows 默认),要在初始化数据库前配置
# Windows 调整区分大小写:fsutil file setcasesensitiveinfo D:\mysql-8.4.6\data enable|disable
lower_case_table_names = 0

# 关闭密码验证,可设置简单密码
#validate_password = off
# 默认存储引擎
#default-storage-engine = INNODB
# 时区,https://dev.mysql.com/doc/refman/8.4/en/time-zone-support.html
#default-time-zone = '+8:00'

便携化

目录结构
/path/mysql_home/
├── data/            # 数据文件 (必须)
├── logs/            # 日志文件 (推荐)
│   ├── error.log
│   ├── slow.log
│   └── binlog/
├── tmp/             # 临时文件 (可选)
├── conf/            # 配置目录 (推荐)
│   └── my.cnf
└── run/             # 运行时文件 (必须)
    ├── mysql.sock
    └── mysqld.pid

# 命令行启动
# 创建完整目录结构
mkdir -p /path/mysql_home/{data,logs/binlog,tmp,conf,run}
# 设置权限(重要!)
chown -R mysql:mysql /path/mysql_home
chmod 750 /path/mysql_home/data
# 命令行启动
mysqld \
--no-defaults \
--user=mysql \
--datadir=/path/mysql_home/data \
--socket=/path/mysql_home/run/mysql.sock \
--pid-file=/path/mysql_home/run/mysqld.pid \
--log-error=/path/mysql_home/logs/error.log \
--slow_query_log_file=/path/mysql_home/logs/slow.log \
--log-bin=/path/mysql_home/logs/binlog/mysql-bin \
--tmpdir=/path/mysql_home/tmp \
--lc-messages-dir=/usr/share/mysql \
--initialize-insecure  # 仅首次初始化使用

# 配置文件启动
创建配置文件
/path/mysql_home/conf/my.cnf
[mysqld]
# 核心路径配置
user=mysql
datadir=/path/mysql_home/data
socket=/path/mysql_home/run/mysql.sock
pid-file=/path/mysql_home/run/mysqld.pid
# 日志配置
log_error=/path/mysql_home/logs/error.log
slow_query_log_file=/path/mysql_home/logs/slow.log
log-bin=/path/mysql_home/logs/binlog/mysql-bin
# 其他配置
tmpdir=/path/mysql_home/tmp
lc-messages-dir=/usr/share/mysql
# 避免系统依赖
skip-external-locking
skip-name-resolve
启动命令
mysqld --defaults-file=/path/mysql_home/conf/my.cnf

符号链接
ln -s /path/mysql_home/run/mysql.sock /var/lib/mysql/mysql.sock
systemd 服务文件示例
[Unit]
Description=Portable MySQL Service

[Service]
User=mysql
ExecStart=/usr/sbin/mysqld --defaults-file=/path/mysql_home/conf/my.cnf
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
View Code

 


https://dev.mysql.com/doc/refman/5.7/en/windows-installation.html & https://dev.mysql.com/doc/refman/8.0/en/windows-install-archive.html

https://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html & https://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html

中文 5.1:https://dev.mysql.com/doc/index-archive.html

https://mysqltutorial.org & http://ourmysql.com & https://imysql.com

posted @ 2019-07-09 16:37  江湖小小白  阅读(12987)  评论(0)    收藏  举报