zoukankan      html  css  js  c++  java
  • 安装Mysql8的心酸历程

    最近要在Macos上面安装一个MySQL8,本来不出意外的话,应该是一件很简单的事,结果耗费了我大半天的时间,在老家也没网,还是用的手机4G网,不过,好在最终还算安装好了,也算是给了自已一点小小的安慰吧。

    brew方式

    在Mac上,我安装软件首先是用brew的方式,主要也是不想去处理各种依赖,卸载软件也方便,如果你要升级软件也是很方便的,他基本都是通过软链接的方式,比如我常用的php和go,升级起来就很方便呀,安装完后,软链接更改下就行了,但是如果你不经常更新brew的话,在安装软件的时候他会先更新自身,有时候网速不行,就会很慢的,当然可以关闭自动更新。

    我这个问题就是在更新自身时出现的,当更新完自身时,我使用brew install mysql@8来安装Mysql8时,提示有一个不兼容,大概意思就是brew与我当前的macos不兼容(sierra 10.12),于是我执行brew search mysql@8,报这个兼容错误,不对呀,我在安装之前,特意执行了search的,确认能找到这个包,于是我执行brew search mysqlphp等其它的包搜索,都提示这个,这下好了,软件没装好,倒把brew也玩坏了,在网上找了半天差点,其实也没找到啥重要的信息,就要我打算要重装brew了,无意中找到一个 brew update-reset,这个执行后,重置了brew,再执行其它的brew命令,这次不报错了,但是我也不敢再使用brew的方式了,没法,我想着那就只能改用dmg方式了。

    dmg方式

    于是乎,我在Mysql官网下载了macos版本的mysql,从下载到安装是一路顺利的。安装完后,在系统偏好设置中找到Mysql,发现启动状态那里是一个红色的,而不是绿色的,也就是说服务没起来。我想着也是正常的,毕竟我本地已经安装了一个5.7的了,而且安装的时候也没有让我选择端口,我的第一想法是肯定我改一下端口就行了。于是,我在配置文件里面把端口改成3307,再去启动服务还是没起来。参照网上的,在 /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist这个文件中改一些参数,比如路径和端口

     <key>ProgramArguments</key>
            <array>
                    <string>/usr/local/mysql-8.0.21-macos10.15-x86_64/bin/mysqld</string>
                    <string>--defaults-file=/usr/local/etc/my8.0.cnf</string>
                    <string>--basedir=/usr/local/mysql-8.0.21-macos10.15-x86_64</string>
                    <string>--datadir=/usr/local/mysql-8.0.21-macos10.15-x86_64/data</string>
                    <string>--plugin-dir=/usr/local/mysql-8.0.21-macos10.15-x86_64/lib/plugin</string>
                    <string>--early-plugin-load=keyring_file=keyring_file.so</string>
                    <string>--keyring-file-data=/usr/local/mysql-8.0.21-macos10.15-x86_64/keyring/keyring</string>
                    <string>--log-error=/usr/local/mysql-8.0.21-macos10.15-x86_64/data/mysqld.local.err</string>
                    <string>--pid-file=/usr/local/mysql-8.0.21-macos10.15-x86_64/data/mysqld.local.pid</string>
                    <string>--user=_mysql</string>
                    <string>--default_authentication_plugin=mysql_native_password</string>
                    <string>--port=3307</string>
            </array>

    可结果还是一样,于是我进入mysql8的安装目录,同时停用我本地的5.7,直接接行mysqld,发现有权限问题,这个目录的用户是_mysql,然后我就更改为另一个用户再启动,这次倒是能启动了,但是我连进去后,发现里面的数据库还是5.7下面的库,我明明指定了8.0自身的data路径,怎么跑到5.7下去了。哎,算了,不想去深究了,看网上说可以用mysql_multi的方式启动多实例,我是不想去折腾了,只能用上最后的方式了,用Docker吧.

    Docker方式

    Docker用于体验一些新的东西,搞些环境还是挺方便的,而且如果不要了,直接删除镜像或容器就行了。

    用Docker安装mysql8很简单,先搜索下

    $ docker search mysql
    NAME                              DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
    mysql                             MySQL is a widely used, open-source relati...   10014               [OK]
    mariadb                           MariaDB is a community-developed fork of M...   3666                [OK]
    mysql/mysql-server                Optimized MySQL Server Docker images. Crea...   733                                     [OK]

    拉取镜像

    $ docker pull mysql:8.0

    待拉取完毕后,查看下镜像

    $docker images
    REPOSITORY                                      TAG                 IMAGE ID            CREATED             SIZE
    mysql                                           8.0                 e1d7dc9731da        3 weeks ago         544MB

    使用镜像 在使用前,先建立几个目录,主要是配置和data的映射,如果不用宿主机建立映射,你的容器重启后,数据就没了。

    $ mkdir -p ~/Application/Docker/mysql/data ~/Application/Docker/mysql/log ~/Application/Docker/mysql/conf

    运行容器:

    $cd ~/Application/Docker/mysql/
    $ docker run -p 3307:3306 --name mysql8 -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0

    命令说明:

    -p 3307:3306:将容器的 3306 端口映射到主机的 3307 端口。
    -v -v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf。
    -v $PWD/logs:/logs:将主机当前目录下的 logs 目录挂载到容器的 /logs。
    -v $PWD/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。
    -e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。

    上面的命令运行后,如果正常的话,就会启动一个容器,使用 docker psdocker container ls查看,如果找不到的话,那就说明刚才那个run有问题,这种一般是你宿主机的权限问题,更改下权限就行了,如果失败了,需要用docker rm mysql8删除刚才的容器,不然下次再用run的时候会报已经存在同名的容器了。

    $docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
    37bcead3d1b1        mysql:8.0           "docker-entrypoint..."   23 hours ago        Up 21 hours         33060/tcp, 0.0.0.0:3307->3306/tcp   mysql8

    上面的容器启动后,可以进入容器内部看看

    $ docker exec -it mysql8 /bin/bash

    在容器内部,可以使用mysql -u root -p123456的方式来连接mysql8

    通过上面的安装方式,只是说明了安装成功,如果在宿主机环境通过应用程序或者其它Mysql管理工具去连接,你会发现还是报错,主要是密码认证那里,mysql8使用了新的密码算法,于是我们就要更改下算法为 mysql_native_password

    进入我们启动的容器内部,然后连接mysql,再分别执行

    mysql> grant all PRIVILEGES on *.* to root@'%' WITH GRANT OPTION;
    mysql> ALTER user 'root'@'%' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER; 
    mysql> ALTER user 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456'
    mysql>  FLUSH PRIVILEGES;

    执行完成后,这个时候才算真正的安装完成,同时在宿主机也能用3307端口来远程连接了。

    倒腾了一大圈,结果还是用Docker的方式来安装的,还别说,用Docker整这些环境虽然也有不少的小问题,但是总体来说,还是挺方便的,看来,以后还是要把Docker多用起来,只要对一些数据作持久化处理,其它的就尽量少管,也是一件很美妙的事呀。

  • 相关阅读:
    android自定义Dialog
    go笔记-内存回收分析、内存统计信息字段释义
    go笔记-defer以及性能
    go笔记-goroutine和panic
    并发编程-高性能IO-reactor模式
    go笔记-查看coredump:delve调试工具
    IO多路复用[转]
    kubernates 1.20.6安装
    JavaScript 数组元素的一些操作
    如何理解 Java 多线程
  • 原文地址:https://www.cnblogs.com/smartrui/p/13764685.html
Copyright © 2011-2022 走看看