docker 創建mysql容器

docker創建mysql容器:

sudo docker run -p 3308:3306 --name mysql56 -v /home/ray/data/mysql56:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.6

主要是為了解決直接創建容器的時候報錯:
Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock

參考了這位仁兄的文章Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock

創建nginx容器

sudo docker run --name nginx -p 80:80 -v /home/ray/data/nginx:/usr/share/nginx/html -d nginx:latest

把conf文件也映射出來

docker run --name nginx -p 80:80 -v /home/docker-nginx/nginx.conf:/etc/nginx/nginx.conf -v /home/docker-nginx/log:/var/log/nginx -v /home/docker-nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf -d nginx

創建phpmyadmin容器

docker run --name pma -p 58080:80 --link mysql56:db -d phpmyadmin/phpmyadmin

修改 /etc/mysql/mysql.conf.d/my.cnf文件,設置MySQL的字符集:


# Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2.0,
# as published by the Free Software Foundation.
#
# This program is also distributed with certain software (including
# but not limited to OpenSSL) that is licensed under separate terms,
# as designated in a particular file or component or in included license
# documentation.  The authors of MySQL hereby grant you an additional
# permission to link the program and your derivative works with the
# separately licensed software that they have included with MySQL.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License, version 2.0, for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA

#
# The MySQL  Server configuration file.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

[client]
default-character-set=utf8

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
#log-error      = /var/log/mysql/error.log
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
character-set-server=utf8
init_connect='SET NAMES utf8'

[mysql]
default-character-set=utf8

MySQL的環境變量查看


[root@MySQL mysql]# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.6.36 MySQL Community Server (GPL)
 
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
 
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
 
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 
mysql> select version();
+-----------+
| version() |
+-----------+
| 5.6.36    |
+-----------+
1 row in set (0.00 sec)
 
mysql> show variables like 'have%ssl%';
+---------------+----------+
| Variable_name | Value    |
+---------------+----------+
| have_openssl  | DISABLED |
| have_ssl      | DISABLED |
+---------------+----------+
2 rows in set (0.00 sec)
 
mysql> show variables like 'port';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 3306  |
+---------------+-------+
1 row in set (0.00 sec)
 
mysql> show variables like 'datadir';
+---------------+-------------------+
| Variable_name | Value             |
+---------------+-------------------+
| datadir       | /data/mysql_data/ |
+---------------+-------------------+
1 row in set (0.00 sec)

ubuntu下修改mysql5.7的密碼

首先找到my.cnf所在的文件夾

cd /etc/mysql/mysql.conf.d/

備份原始的配置文件

cp mysqld.cnf mysqld.cnf.init

編輯mysql.cnf文件,在skip-external-locking的下一行添加skip-grant-tables,跳過密碼校驗

user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3306
basedir         = /usr
datadir         = /var/lib/mysql
tmpdir          = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking 
# 在這里添加
skip-grant-tables 

重啟mysql服務并進入mysql

sudo service mysql restart
mysql

進入mysql之后修改密碼:

use mysql;
update user set authentication_string=password('root') where user='root';
flush privileges;
quit;

修改完成之后重啟mysql服務sudo service mysql restart

補充內容:使用mysql導入大文件sql時可能會報MySQL server has gone away錯誤,引用一下文章得以解決:

MySQL server has gone away錯誤的解決辦法

在我們使用mysql導入大文件sql時可能會報MySQL server has gone away錯誤,該問題是max_allowed_packet配置的默認值設置太小,只需要相應調大該項的值之后再次導入便能成功。該項的作用是限制mysql服務端接收到的包的大小,因此如果導入的文件過大則可能會超過該項設置的值從而導致導入不成功!下面我們來看一下如何查看以及設置該項的值。

查看 max_allowed_packet 的值

show global variables like 'max_allowed_packet';
+--------------------+---------+
| Variable_name      | Value   |
+--------------------+---------+
| max_allowed_packet | 4194304 |
+--------------------+---------+

可以看到默認情況下該項的大小只有4M,接下來將該值設置成150M(10241024150)

set global max_allowed_packet=157286400;

此時再查看大小

show global variables like 'max_allowed_packet';
785e20e2ec81938375070e548b408d55.png

通過調大該值,一般來說再次導入數據量大的sql應該就能成功了,如果任然報錯,則繼續再調大一些就行,請注意通過在命令行中進行設置只對當前有效,重啟mysql服務之后則恢復默認值,但可以通過修改配置文件(可以在配置文件my.cnf中添加max_allowed_packet=150M即可)來達到永久有效的目的,可其實我們并不是經常有這種大量數據的導入操作,所以個人覺得通過命令行使得當前配置生效即可,沒有必要修改配置文件。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。