问题:
我使用的是最不常用的源码编译安装,至于它的好处我就不在这里赘述了,我在执行make的时候,出现下面的错误提示:
上网查了一下,说是内存被消耗完了,我的配置是2G的内存,按照网友的说法,编译安装mysql8至少要6G的内存,硬盘要13G,安装的时间至少要2个小时以上,我吓了一跳,如果内存不够,可以用swap来弥补。我最后放弃了编译安装的方式,准备使用docker。
下载好官方的MySQL8的最新镜像之后,开始了下面的操作:
1.运行容器
docker run \ --restart=always \ -v /etc/localtime:/etc/localtime:ro \ --name mysql8 \ -v /application/mysql8/data:/var/lib/mysql \ -v /application/mysql8/conf:/etc/mysql \ -v /application/mysql8/mysql-files:/var/lib/mysql-files \ -v /application/mysql8/log:/log \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=123456 \ -d mysql:latest
2.数据库配置
#将宿主机的数据库文件拷贝到容器中
docker cp teddylu_2021-03-14.sql mysql8:teddylu_2021-03-14.sql
#进入容器,还原数据库
root@01cfe0de859f:/# mysql -u root -p < teddylu_2021-03-14.sql
Enter password:
#创建用户,授权,并更改其密码模式
mysql> create user 'teddylu'@'127.0.0.1' identified by '654321';
Query OK, 0 rows affected (0.02 sec)
mysql> alter user 'teddylu'@'127.0.0.1' identified with mysql_native_password by '654321';
Query OK, 0 rows affected (0.00 sec)
mysql> grant all privileges on teddylu.* to 'teddylu'@'127.0.0.1';
Query OK, 0 rows affected (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
mysql> select User,Host,plugin from mysql.user;
+------------------+-----------+-----------------------+
| User | Host | plugin |
+------------------+-----------+-----------------------+
| root | % | caching_sha2_password |
| teddylu | 127.0.0.1 | mysql_native_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session | localhost | caching_sha2_password |
| mysql.sys | localhost | caching_sha2_password |
| root | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+
#我之前数据库的信息
Extension mysqli
Server version 5.5.53
Client version mysqlnd 7.4.11
Database username teddylu
Database host 127.0.0.1:3306
Database name teddylu
Table prefix wp_
Database charset utf8mb4
Database collation utf8mb4_unicode_ci
#我现在数据库的信息
mysql> show create database teddylu;
+----------+----------------------------------------------------------------------------------------------------+
| Database | Create Database |
+----------+----------------------------------------------------------------------------------------------------+
| teddylu | CREATE DATABASE `teddylu` /*!40100 DEFAULT CHARACTER SET gbk */ /*!80016 DEFAULT ENCRYPTION='N' */ |
+----------+----------------------------------------------------------------------------------------------------+
mysql> alter database teddylu charset=utf8mb4 collate=utf8mb4_unicode_ci;
Query OK, 1 row affected (0.01 sec)
mysql> show create database teddylu;
+----------+-----------------------------------------------------------------------------------------------------------------------------------+
| Database | Create Database |
+----------+-----------------------------------------------------------------------------------------------------------------------------------+
| teddylu | CREATE DATABASE `teddylu` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ |
+----------+-----------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
即使完成了上面的操作还是出现错误,最后只能用大招,开启debug模式,在wp-config.php文件中修改这一行,将false 改为true :define(’WP_DEBUG’,true);
Warning: mysqli_real_connect(): (HY000/1045): Access denied for user ‘teddylu’@’172.17.0.1’ (using password: YES) in /home/teddylu/wp-includes/wp-db.php on line 1653
Access denied for user ‘teddylu’@’172.17.0.1’ (using password: YES)
建立数据库连接时出错
[root@li1548-187 mysql]# ifconfig
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 0.0.0.0
inet6 fe80::42:7bff:fe13:58cb prefixlen 64 scopeid 0x20<link>
ether 02:42:7b:13:58:cb txqueuelen 0 (Ethernet)
RX packets 266275 bytes 232355590 (221.5 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 272666 bytes 282644102 (269.5 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
这样看的话,就是说wp用的是docker的ip172.17.0.1在连接数据库,而不是宿主机的ip127.0.0.1
我们可以看到这个容器的网络类型是bridge
docker container inspect mysql8
“NetworkSettings”: {
“Bridge”:
改变容器的网络类型,解决办法:
docker run \ -v /etc/localtime:/etc/localtime:ro \ --name mysql8 \ --net=host \ -v /wordpress/mysql8/data:/var/lib/mysql \ -v /wordpress/mysql8/conf:/etc/mysql/conf.d \ -v /wordpress/mysql8/mysql-files:/var/lib/mysql-files \ -e MYSQL_ROOT_PASSWORD=123456 \ -d mysql:8.0.27
ps:记得一定要先在conf下准备好配置文件
这里随便提一下,docker容器的四种网络类型:
1.None:不为容器配置任何网络功能 --net=none
2.container:与另一个运行中的容器共享Network Namespace ,–net=container:caontainerID(k8s)
3.bridge:docker设计的NAT网络模型
4.host:与宿主机共享network namespace,–net=host,性能最高
总结:虽然用了很久的docker 容器,但是对他的网络类型的还理解的不是很深刻,这个问题足足折腾了我一整天,不过收获很大,非常的值得!!!