mac os自带apache和php,需要安装mysql服务和一个界面管理工具(phpmyadmin或navicat 还有mysql官方出的各种工具)
这里有个很详细的教程了:
https://www.cnblogs.com/henusyj-1314/p/6485182.html
=====占坑回头总结一下命令=========
啊唷我的天,brew install phpmyadmin竟然要下载四五十个依赖,太大了,后悔了,早知道装navi算了
==> Installing dependencies for phpmyadmin: apr, apr-util, argon2, aspell, autoconf, brotli, c-ares, libidn, libmetalink, libssh2, jansson, jemalloc, libev, libevent, nghttp2, openldap, rtmpdump, curl-openssl, libtool, unixodbc, freetds, libpng, freetype, gettext, libffi, pcre, gdbm, readline, sqlite, xz, python, glib, gmp, icu4c, jpeg, libpq, libsodium, libzip, tidy-html5, libtiff, webp and php
pma 需要连接mysql,有两种方式,通过socket(localhost)或TCP/IP(127.0.0.1),默认是通过socket,报这个错是因为给pma配的socket与实际运行的mysql的socket不一致。
实际运行的mysql的socket:通过sql > status可以看到是
Connection: Localhost via UNIX socket
UNIX socket: /tmp/mysql.sock
(备查:pma 的配置文件usr/local/etc/phpmyadmin.config.inc.php)
pma也归apache管,在apache的 info页中,php模块看到配置文件应在/etc/php.ini,mysqli模块可看到mysqli.default_socket,确实不是tmp目录的。
去找/etc目录下的php.ini.default配置文件,拷贝出来修改以下两项:
pdo_mysql.default_socket=/tmp/mysql.sock
mysqli.default_socket =/tmp/mysql.sock
重命名为php.ini再放回去,apachectl restart 之后刷新
Configuration File (php.ini) Path | /etc |
Loaded Configuration File | /etc/php.ini |
mysqli.default_socket | /tmp/mysql.sock |
这个是mysql8新增的caching_sha2_password加密认证策略的缘故,除了命令行可以照常登录外,其他的客户端却还不能支持这种加密方法,要想继续使用这些第三方客户端连接数据库,就只能对mysql的配置进行降级,使用mysql旧版本的策略,具体说就是在配置文件中添加这行:
[mysqld]
default_authentication_plugin = mysql_native_password
官方说会按照这个顺序读取配置:/etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf
然而翻遍整个电脑是根本没有个这文件的,却意外地发现了一个:/usr/local/Cellar/mysql/8.0.16/.bottle/etc/my.cnf
> brew list mysql
为什么说意外,因为它在finder中是看不到的,只有命令行下才发现,加上那行配置后拷贝一份到上面说的位置:
> sudo cp /usr/local/Cellar/mysql/8.0.16/.bottle/etc/my.cnf /etc/my.cnf
重启mysql之后却发现没有任何变化。。。后发现原来user表中竟有一个字段叫做plugin,而且旧版的 password字段也被authentication_string所代替:
mysql> select host,user,plugin, authentication_string from mysql.user;
我很惊讶这个加密竟然不是全局的,而是针对具体user的,所以试着把root的改一下
mysql> ALTER USER root@localhost IDENTIFIED WITH mysql_native_password BY '123456';
测试一下果然是按照mysql_native_password存储了