1、安装 MySQL
1.1、拉取
docker pull mysql:5.7
1.2、启动mysql
docker run -p 3306:3306 –name mysql
-v /mydata/mysql/log:/var/log/mysql
-v /mydata/mysql/data:/var/lib/mysql
-v /mydata/mysql/conf:/etc/mysql
-e MYSQL_ROOT_PASSWORD=root
-d mysql:5.7
参数说明
-p 3306:3306 将容器的3306端口映射到主机的3306端口,3306是和宿主机的通信接口,所有docker内部容器的连接使用3306接口,集群配置需连接容器内部3306端口,故最好保持前后端口一致
–name mysql 容器名字
-v
/mydata/mysql/log:/var/log/mysql 将配置文件夹挂载到主机
-v
/mydata/mysql/data:/var/lib/mysql 将日志文件夹挂载到主机
-v
/mydata/mysql/conf:/etc/mysql 将配置文件夹挂载到主机
-e MYSQL_ROOT_PASSWORD=root 初始化 root 用户的密码
-d mysql:5.7 以守护进程方式启动 mysql:5.7 镜像
1.3. 查看启动是否成功
docker ps
注:如启动失败可通过docker logs mysql查看日志排错
1.4、mysql 配置
vi /mydata/mysql/conf/my.cnf
文件内容如下:
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect=’SET collation_connection=utf8_unicode_ci’
init_connect=’SET NAMES utf8′
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
#允许最大连接数;MySQL的max_connections参数用来设置最大连接(用户)数。每个连接MySQL的用户均算作一个连接,max_connections的默认值为100
#MySQL无论如何都会保留一个用于管理员(SUPER)登陆的连接,用于管理员连接数据库进行维护操作,即使当前连接数已经达到了max_connections。因此MySQL的实际最大可连接数为max_connections+1;
这个参数实际起作用的最大值(实际最大可连接数)为16384,即该参数最大值不能超过16384,即使超过也以16384为准;
增加max_connections参数的值,不会占用太多系统资源。系统资源(CPU、内存)的占用主要取决于查询的密度、效率等;
max_connections=1000
==============2020/05/20 添加==============
bug:
导入 SQL 的时候出现 Error #1055
reason:
在MySQL5.7之后,sql_mode中默认存在ONLY_FULL_GROUP_BY,SQL语句未通过ONLY_FULL_GROUP_BY语义检查所以报错。
ONLY_FULL_GROUP_BY:ONLY_FULL_GROUP_BY要求select语句中查询出来的列必须是明确的(其他语句也是一样)。
fix:
1. 在配置文件 [mysqld] 下添加
sql_mode=’STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION’
2. 重启 mysql 容器。
注意: mysql为容器的名字,不同的请更换。或使用容器ID即可。
docker restart mysql
=======================================
1.5、mysql 随 docker 自启动
docker update mysql –restart=always
注意:这里的 mysql 是容器的名字,不是镜像的名字。
1.6、进入 mysql (optional)
docker exec -it mysql /bin/bash
按Ctrl+D或输入exit退出。
1.7、登录 mysql (optional)
mysql -u root -p
注意:密码root密码是上面设置的root
1.8、修改mysql开启远程访问
1.8.1、查看用户信息
mysql> select host,user,plugin,authentication_string from mysql.user;
备注:host为 % 表示不限制ip localhost表示本机使用 plugin非mysql_native_password 则需要修改密码
navicat链接错误;我们继续往下看;
1.8.2、开启远程访问:
mysql> ALTER user ‘root’@’%’ IDENTIFIED WITH mysql_native_password BY ‘root’;
Query OK, 0 rows affected (0.01 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)
注:如本机已安装有mysql,3306端口被占用,外部端口可以映射为其他端口,如下:
docker run -p 13306:3306 –name mysql …
1.9、查看日志
docker logs mysql
1.10、开启binlog日志
查看是否开启binlog日志:
show variables like ‘%log_bin%’
找到刚挂载到本地的mysql设置目录/mydata/mysql/conf
[root@slave132 conf]# cd /mydata/mysql/conf
[root@slave132 conf]# ll
总用量 4
-rw-r–r–. 1 root root 481 9月 22 10:12 my.cnf
[root@slave132 conf]# vi my.conf
新增内容如下:
#binlog setting
log-bin=/var/lib/mysql/mysql-bin server-id=12345
第一个参数:作用是mysql会根据这个配置自动设置log_bin为on状态,自动设置log_bin_index文件为你指定的文件名后跟.index
第二个参数:用的如果是5.7及以上版本的话,重启mysql服务会报错,这个时候我们必须还要指定这样一个参数,随机指定一个不能和其他集群中机器重名的字符串,如果只有一台机器,那就可以随便指定了
设置完后重启mysql容器
docker restart mysql
show variables like ‘%log_bin%’
这个时候,在数据库中创建一个数据库、表,插入一些数据,就会在/var/lib/mysql容器中看到以下,或者是看挂载出来对应的目录上(/mydata/mysql/data)