mySQL安装教程(win10,linux,docker)

win10部署

  • 去官网https://dev.mysql.com/downloads/mysql/下载mysql社区版,现在官网都是推荐下载ZIP Archive的了,安装很方便。

  • 解压下载下来的压缩包。找个合适的路径解压(我的路径:D:\software\mysql-8.0.27-winx64)

  • 在解压的文件夹里”D:\software\mysql-8.0.27-winx64“配置初始化文件my.ini(可能没有这个文件,自己新建一个my.ini文件),将以下内容粘贴今改文件内:

    [mysql]
    
    # 设置mysql客户端默认字符集
    default-character-set=utf8
    
    [mysqld]
    
    #设置3306端口
    port = 3306
    
    # 设置mysql的安装目录,这里换成你自己的,win要用双斜杠
    basedir=D:\\software\\mysql-8.0.27-winx64
    
    # 设置mysql数据库的数据的存放目录,自己先在里面新建一个data文件夹,也要改成自己的路径
    datadir=D:\\software\\mysql-8.0.27-winx64\\data
    
    # 允许最大连接数
    max_connections=50
    
    # 服务端使用的字符集默认为8比特编码的latin1字符集
    character-set-server=utf8
    
    # 创建新表时将使用的默认存储引擎
    default-storage-engine=INNODB
    
    
  • 安装mysql:用管理员权限进入cmd命令窗口,cd命令进入安装路径的bin目录(我的:D:\software\mysql-8.0.27-winx64\bin),当然如果你为sql配置环境变量的话就不用进入bin目录了,系统会帮你找到mysqld命令,进入后运行:

    mysqld --install
    # 执行mysqld install命令出现Service successfully installed时表示mysql成功
    mysqld --initialize
    net start mysql
    # mysql服务已经启动
    
  • 改密码:

    # 先获取原始密码命令:
    mysqld --initialize --console
    # 在打印出的信息里找到:a temporary password is generated for root@localhost:...
    # 冒号后面的字符就是密码,如果找不到这条信息:去data文件夹下找寻.err后缀的文件,从文件里找这条语句。
    # 之后执行以下命令,并输入原始密码
    mysql -u root -p
    # 修改密码为123456
    alter user user() identified by "123456";
    # 可去:电脑-管理-服务-Mysql查看服务启动	
    
  • MySQL可视化工具—navicat:

    https://cloud.tencent.com/developer/article/1804255

  • 如果想要其他主机访问数据库,比如我的Django远程连接数据库,报错:django.db.utils.OperationalE(1130, “Host ’ ...’ is not allowed to connect to this MySQL server”)。这个稍微仔细了解了一下,正常按上述步骤配置完成后,数据库有有几个默认的数据库:information, mysql, performance_schema, sys。可以自行查一下都是干嘛的。其中mysql下有一个user表,用来存储用户权限,需要更改一下访问权限:

    https://www.cnblogs.com/liuhaidon/archive/2019/09/12/11511129.html

    https://blog.csdn.net/wang603603/article/details/104015607

    改完后重启一下mysql服务,或者直接重启电脑。

  • 另外mysql的一般默认使用的3306端口有可能被防火墙限制,需要开放防火墙的3306端口:

    https://www.cnblogs.com/clschao/articles/6736846.html

    之后同样需要重启服务。

博文也仅仅是记录一下自己安装时踩过的坑,内容多是参考其他博客,归纳了一下,同时不合理的略作修改,仅供参考吧。

服务器上部署mysql

官网安装参考:https://dev.mysql.com/doc/refman/5.7/en/binary-installation.html

  • 去官网https://dev.mysql.com/downloads/mysql/下载mysql-8.0.28-linux-glibc2.12-x86_64.tar.xz社区版安装包。

  • 上传到服务器上,找个路径放进去:/home/fzn/mysql。

  • 进入上述路径下,解压:

    tar -xvf mysql-8.0.28-linux-glibc2.12-x86_64.tar.xz 
    
  • 为了方便一些,将解压后的文件夹里的文件挪出来,直接挪到/home/fzn/mysql下面,空文件夹直接删掉。然后配置环境变量

    vim ~/.bashrc
    
    # 把下面的语句粘到文件最下面
    export PATH=$PATH:/home/fzn/mysql/bin
    
    # 更新
    source ~/.bashrc
    
  • 初始化

    mysqld --initialize
    # 执行结束后会产生一个随机的初始密码,把他保存下来,后面改密码。此时mysql文件夹下会产生一个data的文件
    
    # 报了个错:mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
    # 网上说装这个包:sudo apt-get install libaio-dev
    
  • 启动服务

    mysqld
    
    # 这里报过一些error:
    # (1)Too many arguments (first extra is 'start').Aborting.-->刚开始使用mysqld start启动服务,然后就报错了,网上解决方案是直接用mysqld启动
    # (2)Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)-->网上说了一大堆原因,乱七八糟,其实这个sock文件是sql服务启动后产生的临时文件,存放在了/tmp下,一旦服务停止临时文件就自己删除了,所以如果没有启动mysql服务就没有办法找到这个文件,就会报错。换句话说如果不启动服务直接mysql -u root -p会报这个错,
    
  • 登录mysql并修改密码

    # 新开一个终端,用root用户登录
    mysql -u root -p
    # 输入之前记录的密码。回车会出现mysql->,表示登录成功
    #报了个错:mysql: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory,意思是缺少那个so.5的包。网上解决方案:sudo ln -s /usr/lib64/libtinfo.so.6.1 /usr/lib64/libtinfo.so.5  创建这个链接,没用。查一下这个文件:ls /lib/x86_64-linux-gnu/libtinfo.so.*   发现我的ubuntu根本没有这个版本。执行 sudo apt-get install libncurses5 装上解决
    
    # 改密为123456
    alter user user() identified by "123456";
    
  • 如果需要其他主机远程访问,比如用其他主机使用navicat等工具访问数据库,需要修改以下数据库用户权限。mysql安装后里面有四个默认的数据库,其中一个名为"mysql"的数据库下有一个"user"表,记录了mysql用户的权限信息。截取了前几列如下:

    HostUserSelect_priv
    localhostmysql.infoschemaY
    localhostmysql.sessionN
    localhostmysql.sysN
    localhostrootY

    可以看到所有用户的主机名host都是localhost,即仅能本地访问,例如我们用root用户身份远程访问数据库,则需要更改Host的权限。

    # 选择mysql数据库
    mysql-> use mysql;
    
    
    # 开启远程访问权限,以下两种方法都行
    # 改表法,%代表任意主机均可访问
    update user set host='%' where user='root';
    # 授权法
    # --赋予任何主机访问权限:
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
    # --允许指定主机(IP地址)访问权限:
    GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.3' IDENTIFIED BY 'root' WITH GRANT OPTION;
    # 刷新
    FLUSH PRIVILEGES;
    
    # 可以再次查看确认一下
    select  User,authentication_string,Host from user;
    
    # 修改后需要重启一下服务
    ps -ef | grep mysqld	# 查询
    kill 进程号	# kill
    mysqld	# 重启
    
    # 可以尝试用navicat等工具尝试连接
    

配置文件的问题始终没有搞明白,按理说有一个my.cnf文件,也许是有默认配置。在我的/etc目录下也没有找到

又回顾了几句sql语句,都忘干净了,从菜鸟教程摘的,敲了几句:https://www.runoob.com/mysql/mysql-administration.html

docker部署mysql

听同学说docker贼爽,试了一下,简直最舒服的方式,docker确实是比较爽。之前出现的乱七八糟的让人头疼的问题全都没有。只有几步就可以。

  • 在真实的ubuntu上装的docker,虚拟机也可以,docker官网安装教程:https://docs.docker.com/engine/install/ubuntu/

  • 装好docker之后,dockerhub里面有mysql镜像,dockerhub中mysql在这:https://hub.docker.com/_/mysql?tab=tags 。我装的8.0.28版本,直接执行以下命令去把镜像拉进来:

    sudo docker pull mysql:8.0.28
    
  • 拉完后用这个镜像开一个容器

    sudo docker run -itd --name mysql  -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.28
    # -d是后台运行,这样就不会因为关闭终端而导致容器停止运行。
    # --name后面的mysql是你给容器取得名字
    # -p后面的3306:3306是“你主机的端口:docker引擎的端口”,因为docker和主机的关系是client/server的关系,所以其他主机想要访问docker内的mysql只需要访问主机的3306端口。
    # -e后面的MYSQL_ROOT_PASSWORD=123456是sql的root用户的密码(123456)(我自己进sql看了一下这个root好像是新建的,且所有主机可访问)。
    # 最后面的mysql:8.0.28是镜像名字,就是刚刚拉进来的那个。
    
  • 已经装好了。。。有点爽,然后你可以用其他主机用一些navicat啥的访问一下试试(要用root用户访问,因为刚刚部署的数据库只有新建的那个root用户可以被其他主机访问)

    # 访问的配置
    """
    ip:安装docker主机的ip
    端口:
    用户:root
    密码:123456
    """
    

管理MySQL的命令

终端命令

tip:要注意有没有分号。

# 当 MySQL 服务已经运行时, 我们可以通过 MySQL 自带的客户端工具登录到 MySQL 数据库中, 首先打开命令提示符, 输入以下格式的命名:
mysql -h 主机名 -u 用户名 -p
# 参数说明:
# -h : 指定客户端所要登录的 MySQL 主机名, 登录本机(localhost 或 127.0.0.1)该参数可以省略;
# -u : 登录的用户名;
# -p : 告诉服务器将会使用一个密码来登录, 如果所要登录的用户名密码为空, 可以忽略此选项。

# 先登录数据库,并输入密码
mysql -u root -p
# 查看mysql服务器是否启动
ps -ef | grep mysqld
# 在 mysql 数据库中的 user 表添加新用户,例如:用户名为guest,密码为guest123,并授权用户可进行 SELECT, INSERT 和 UPDATE操作权限:
mysql> INSERT INTO user 
          (host, user, password, 
           select_priv, insert_priv, update_priv) 
           VALUES ('localhost', 'guest', 
           PASSWORD('guest123'), 'Y', 'Y', 'Y');
# 退出
exit or quit

# 选择使用的数据库
mysql> use 数据库名;
# 显示所有的数据库名称
mysql> show databases;
# 显示指定数据库的所有表,使用该命令前需要使用 use 命令来选择要操作的数据库。
mysql> show tables;
# 显示数据表的属性,属性类型,主键信息 ,是否为 NULL,默认值等其他信息。
mysql> show columns from 数据表;
# 显示数据表的详细索引信息,包括PRIMARY KEY(主键)。
mysql> show index from 数据表;

创建,删除,选择数据库

# 创建
mysql> create database 数据库名;
# 使用root用户登录,root用户拥有最高权限,可以使用 mysql mysqladmin 命令来创建数据库。
mysqladmin -u root -p create 数据库名;

# 删除
mysql> drop database <数据库名>;
mysqladmin -u root -p drop <数据库名>

# 选择
mysql> use <数据库名>;

创建,删除表

# 创建
create table 数据表名 (column_name column_type);
# 例如:
CREATE TABLE IF NOT EXISTS `runoob_tbl`(
   `runoob_id` INT UNSIGNED AUTO_INCREMENT,
   `runoob_title` VARCHAR(100) NOT NULL,
   `runoob_author` VARCHAR(40) NOT NULL,
   `submission_date` DATE,
   PRIMARY KEY ( `runoob_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
# 注意:MySQL命令终止符为分号 ; 。注意: -> 是换行符标识,不要复制。
mysql> CREATE TABLE runoob_tbl(
   -> runoob_id INT NOT NULL AUTO_INCREMENT,
   -> runoob_title VARCHAR(100) NOT NULL,
   -> runoob_author VARCHAR(40) NOT NULL,
   -> submission_date DATE,
   -> PRIMARY KEY ( runoob_id )
   -> )ENGINE=InnoDB DEFAULT CHARSET=utf8;
   
# 删除
drop table 表名;

向表中插入数据

insert into table_name ( field1, field2,...fieldN )
                       values
                       ( value1, value2,...valueN );
# 如
mysql> use RUNOOB;
Database changed
mysql> INSERT INTO runoob_tbl 
    -> (runoob_title, runoob_author, submission_date)
    -> VALUES
    -> ("学习 PHP", "菜鸟教程", NOW());

查询

select column_name,column_name from table_name [WHERE Clause] [LIMIT N][ OFFSET M]
# 查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。
# SELECT 命令可以读取一条或者多条记录。
# 你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
# 你可以使用 WHERE 语句来包含任何条件。
# 你可以使用 LIMIT 属性来设定返回的记录数。
# 你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。

修改更新数据

update 数据表名 set field1=更新值, field2=更新值 [WHERE Clause]
#如
UPDATE runoob_tbl SET runoob_title='学习 C++' WHERE runoob_id=3;

数据表删除数据

delete from 数据表名 [where Clause]
# 如
DELETE FROM runoob_tbl WHERE runoob_id=3;

MySQL 导入,导出数据

# 导出
mysql> select * from 数据表名 
	-> into outfile '/tmp/runoob.txt';
# LOAD DATA INFILE是SELECT ... INTO OUTFILE的逆操作,SELECT句法。为了将一个数据库的数据写入一个文件,使用SELECT ... INTO OUTFILE,为了将文件读回数据库,使用LOAD DATA INFILE。
# SELECT...INTO OUTFILE 'file_name'形式的SELECT可以把被选择的行写入一个文件中。该文件被创建到服务器主机上,因此您必须拥有FILE权限,才能使用此语法。
# 输出不能是一个已存在的文件。防止文件数据被篡改。
# 你需要有一个登陆服务器的账号来检索文件。否则 SELECT ... INTO OUTFILE 不会起任何作用。
# 在UNIX中,该文件被创建后是可读的,权限由MySQL服务器所拥有。这意味着,虽然你就可以读取该文件,但可能无法将其删除。

# 导入
mysql> load data local infile 'dump.txt' into table mytbl;
# 如果指定LOCAL关键词,则表明从客户主机上按路径读取文件。如果没有指定,则文件在服务器上按路径读取文件。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值