安装方式


Install for Ubuntu (apt-get)

1.执行命令:

sudo apt-get install mysql-server -y
sudo apt-get install mysql-client -y
sudo apt-get install libmysqlclient-dev -y

完成之后可以使用 sudo netstat -tap | grep mysql 命令来检查是否安装成功.

2.执行命令:

  • 它的配置文件保存在/etc/my.cnf

    如果找不到, 使用 mysql --help 查看关于MYSQL对应 配置文件my.cnf

初始化其二

前置条件 建立了 mysql 用户

mkdir -p data/log data/data data/run
bin/mysqld --initialize --basedir=/usr/local/mysql_5.7 --datadir=/usr/local/mysql_5.7/data/data --user=mysql

以上会生成root 随机密码

2019-08-12T08:00:27.362693Z 1 [Note] A temporary password is generated for root@localhost: X,%;kYzJS0yv>

配置路径 vim /etc/my.cnf

启动MySQL服务; cp support-files/mysql.server /etc/init.d/mysql

chkconfig mysql on service mysql start

RPM 方式

参考笔记N_Linux.md: MySQL rpm压缩包方式

启动/停止

1.启动

  • ./bin目录下执行: mysqld --console

mysqld --defaults-file=../conf/my.ini --console //非默认路径, 指定配置文件

默认不能使用root启动 mysqld —user=root —console

2.停止

  • ./bin目录下执行: mysqladmin -u root -p shutdown

注册为服务

3.注册为服务

  • ./bin目录下执行: mysqld -install (显示: Service successfully installed. 则注册服务成功; )
  • 启动 net start mysql { 注: mysql为服务名, 可根据服务管理列表查看MySQL服务名 }

删除已经初始化的服务, 命令: mysqld --removesc delete mysql

Installation for Windowns

可参考 官方文档: https://dev.mysql.com/doc/refman/5.7/en/windows-install-archive.html
(貌似linux下也适用, 未测试)

下载

附上5.7的下载链接: https://dev.mysql.com/downloads/mysql/5.7.html#downloads

5.7 安装版 需要安装.net 4.52

创建操作文件

my.ini(Creating an Option File)

新建配置文件my.ini

[mysqld]
设置mysql的安装目录  
basedir=F:\\software\\mysql-5.7.22-winx64
 
设置mysql数据库的数据的存放目录, 必须是data, 或者是\\xxx-data  
datadir=F:\\software\\mysql-5.7.22-winx64\\data  
 
设置mysql服务器的字符集, 默认编码  
default-character-set=utf8  
 
[WinMySQLAdmin]
指定mysql服务启动启动的文件  
Server=F:\\software\\mysql-5.7.22-winx64\\bin\\mysqld.exe  
user=root  

手动初始化

  1. 手动初始化 官方文档
  • ./bin目录下执行: mysqld --defaults-file=../my.ini --initialize

  • 之后它会为root用户, 生成一个随机密码, 记录在日志文件中, 一般在数据库目录/以 *.err后缀的文件.

    • DESKTOP-BG95TVK.err
  • 初始化后,必须登陆更改root密码, 才能使用,(使用root登陆后)

    • ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
  • 踩坑:

  • 配置文件路径不能有空格, 否则会在空格截止
  • 数据目录如果存在必须为空
  • 如果日志文件出现无法设置default-character-set=utf8,在my.ini以character_set_server=utf8替换之

注册为服务

./bin目录下执行:

mysqld -install [servername] mysqld -install mysql

显示: Service successfully installed. 则注册服务成功

  • 启动

net start [servername] net start mysql

删除已经初始化的服务, 命令: mysqld —remove 或 sc delete mysql

从源码编译安装 (华为泰山ARM)

参考官页文档: > DOCUMENTATION >MySQL 5.7 Reference Manual / Installing and Upgrading MySQL / Installing MySQL from Source Installing MySQL from Source

下载源码

mysql guthub release page

源码安装必要的条件

Source Installation Prerequisites

基本编译软件

gcc make ..等 yum install -y cmake make gcc gcc-c++ wget ncurses-devel cmake make perl ncurses-devel openssl-devel bison-devel libaio libaio-devel

Boost C++ libraries

Boost 库麻烦一点

官页

  • 执行流程
## 建立目录
mkdir /usr/local/boost1.7
cd /usr/local/boost1.7
 
## 下载
wget https://dl.bintray.com/boostorg/release/1.70.0/source/boost_1_70_0.zip
 
## 解压 
unzip boost_1_70_0.zip
 
## 到目录
cd boost_1_70_0.zip
 
#执行 --prefix 指定安装目录
./bootstrap.sh --prefix=/usr/local/include/boost
./b2 --prefix=/usr/local/include/boost install
 
## cd到安装目录应该有 include 和 lib 文件夹了.
cd /usr/local/include/boost
 

./bootstrap.sh 是用来检查安装环境的, 如果报错了, 看一下是缺少了什么, 安装一下即可; ./b2 是上一步成功后生成的, 使用它来进行构建boost库;

如果为了引用方便将目录加到环境变量中

在/etc/profile文件中添加

export CPLUS_INCLUDE_PATH=/usr/local/include/boost/include:$CPLUS_INCLUDE_PATH

export LIBRARY_PATH=/usr/local/include/boost/lib:$LIBRARY_PATH

export LD_LIBRARY_PATH=/usr/local/include/boost/lib:$LD_LIBRARY_PATH

然而.. 并不需要编译Boost库, 我!

[下载](wget http://www.sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz)解压,只需要编译MySQL时指定`DWITH_BOOST`目录即可

编译命令概览

Installing MySQL Using a Standard Source Distribution

摘自文档片段

## Beginning of source-build specific instructions 开始规定源码信息
shell> tar zxvf mysql-VERSION.tar.gz
shell> cd mysql-VERSION
shell> mkdir bld ## 新建进入目录
shell> cd bld
shell> cmake .. #cmake 这里需要添加 DWITH_BOOST 库文件位置, 以及一些选项, 见下cmake完整命令
## cd .. 到目录make, 不明白文档 新建bld目录的意义...
shell> make ## make 编译
shell> make install ## make install 安装
## End of source-build specific instructions

cmake完整命令:

cmake .. 
 -DCMAKE_INSTALL_PREFIX=/usr/local/mysql_5.7\ ## 安装目录
 ## -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock\  #mysql socket文件位置? 后面这个一直保报错, 默认即可了,/tmp/mysql.sock
 -DDEFAULT_CHARSET=utf8mb4\ ## 默认字符集..
 -DDEFAULT_COLLATION=utf8mb4_general_ci\ 
 -DWITH_MYISAM_STORAGE_ENGINE=1 \
 -DWITH_INNOBASE_STORAGE_ENGINE=1 \
 -DWITH_MEMORY_STORAGE_ENGINE=1 \
 -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1 \
 -DMYSQL_DATADIR=/usr/local/mysql/data \
 -DMYSQL_USER=mysql \
 -DMYSQL_TCP_PORT=6603 \
 -DWITHOUT_PARTITION_STORAGE_ENGINE=1 \
 -DWITH_BOOST=/usr/local/boost\ ## 指定Boost库位置

MMP的不需要编译Boost库…

初始化

专有用户

为了安全性, 给mysql数据库创建专有用户, 该用户只能访问mysql目录, 不能访问系统其它目录, 禁shell

## Preconfiguration setup 创建用户组 用户(禁shell)
shell> groupadd mysql
shell> useradd -r -g mysql -s /bin/false mysql
 
chown -R mysql:mysql /usr/local/mysql_5.7 ## 给目录所有者

初始化

初始化 基本库数据, 比如mysql库 , mysql.user用户表 ./bin/mysqld --initialize --basedir=/usr/local/mysql_5.7 --datadir=/data/data --user=mysql

sudo mysqld_safe --basedir=/home/pi/mysql_5.7 --datadir=/home/pi/mysql_5.7/data --user=root

配置文件 my.cnf

https://dev.mysql.com/doc/refman/8.0/en/option-files.html

默认情况下mysql会用/etc/my.cnf 作为配置文件

vi /etc/my.cnf

[mysqld]
datadir= /usr/local/mysql_5.7/data/data
port=3306
# bind-address = 0.0.0.0
max_connections = 100 
max_allowed_packet = 50M
 
[mysqld_safe]
log-error=/usr/local/data/log/mysql.log
pid-file=/usr/local/data/run/mysql.pid
 
!includedir /etc/my.cnf.d
 

踩坑指南:mysql.log, mysql.pid 这些文件需要自己手动创建, 不然启动报错The server quit without updating PID file

vi /usr/local/data/log/mysql.log ## :wq退出
chown mysql:mysql /usr/local/data/log/mysql.log ## 更改拥有者
 

启动

/bin./mysqld_safe --user=mysql &

/bin./mysqladmin -u root -p shutdown //关闭 mysqladmin shutdown

作为服务开机启动

  • 复制 ./support-files/mysql.server/etc/init.d/ cp support-files/mysql.server /etc/init.d/mysql

  • 编辑 vi /etc/init.d/mysql

将目录参数填上

basedir=/usr/local/mysql/
datadir=/usr/local/mysql/data/
  • 授权: chmod +x /etc/init.d/mysql

  • 设为开机启动:

chkconfig --add mysql

//重启服务: 
service mysql restart
 
//停止服务: 
service mysql stop
 
//启动服务: 
service mysql start
 
//查看服务: 
service mysql status

参考博客 MySQL5.7编译和测试_数据库_鲲鹏软件-华为云

踩坑指南

在 Linux 下 无限重启?

表现为pid不断变化

ps -ef |grep mysql

/usr/sbin/mysqld —daemonize —pid-file=/var/run/mysqld/mysqld.pid

注意参数 后面的pid文件, 其实是以mysql 用户运行, 但是它没有数据目录的权限 so… service mysql stop —手动关闭mysql

强制root 用户运行

mysqld start --user root
mysqld restart --user root
mysqld stop --user root

DDL 非主键条件错误

MySql默认运行在safe-updates模式下, 该模式会导致非主键条件下无法执行update或者delete命令,

执行命令 SET SQL_SAFE_UPDATES = 0; //修改下数据库模式 SET SQL_SAFE_UPDATES = 1; //记得改回来

忘记 root密码?

cd 到 ./bin 目录

执行: mysqld -nt --skip-grant-tables

以管理员身份重新启动一个cmd命令窗口:

mysql -uroot -P 3306 -p, 无需输入密码 Enter进入数据库;

无密码访问MySQL

无密码MySQL访问方法

在cmd中的mysql\bin文件夹下执行下面语句, 用于跳过用户验证访问数据库; 当然, 如果本机有正在运行的mysql的服务需要先停掉;

$ mysqld --skip-grant-tables

另外一个cmd, 同样在mysql\bin文件夹下执行mysql访问数据库; $ mysql

$ use mysql;
database changed

如果要更改现有用户的密码, 例如root@localhost; mysql>UPDATE user SET Password=PASSWORD('123') WHERE User='root' AND Host='localhost';