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
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

浙公网安备 33010602011771号