docker mysql 的安装

下载mysql 镜像

搜索镜像

docker search mysql
docker mysql 的安装_第1张图片

拉取镜像

docker pull mysql:5.7.30

此处建议使用mysql5.7版本,因为这个版本生产中使用的还是较为常用的版本.8.x版本可以慢慢研究学习.

启动镜像

docker run -p 7306:3306 --name mysql --privileged=true -v /data/docker-conf/docker-mysql/conf:/etc/mysql/conf.d -v /data/docker-conf/docker-mysql/data/mysqldir:/var/lib/mysql -v /data/docker-conf/docker-mysql/data:/data -e MYSQL_ROOT_PASSWORD=123456 -e TZ=Asia/Shanghai -d mysql:5.7.30

-v /data/docker-conf/docker-mysql/conf:/etc/mysql/conf.d --使用自定义配制文件
-v /data/docker-conf/docker-mysql/data/mysqldir:/var/lib/mysql --db数据存到宿主机
-v /data/docker-conf/docker-mysql/data:/data --日志等文件存到宿主机

docker mysql 启动错误:

docker logs mysql

2020-05-18T13:56:52.005087Z 0 [ERROR] Failed to create a socket for IPv4 '0.0.0.0': errno: 13.
2020-05-18T13:56:52.005097Z 0 [ERROR] Can't create IP socket: Permission denied
2020-05-18T13:56:52.005103Z 0 [ERROR] Aborting

解决:

运行时加入 --privileged=true root权限运行

远程连接skip-grant-tables

docker exec -it mysql /bin/bash
可能的错误

  • ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: YES)
    • 解决
      1. 在my.cnf文件中添加skip-grant-tables
      2. docker restart mysql
      3. docker exec -it mysql mysql -uroot -p 直接回车
      4. 执行: update mysql.user set authentication_string=password(‘123’) where user=‘root’;
      5. select host,user,plugin,authentication_string from mysql.user
        • docker mysql 的安装_第2张图片
    1. exit 退出容器
    2. 将 my.cnf 中skip-grant-tables注释
    3. docker restart mysql
    4. docker exec -it mysql mysql -uroot -p 输入密码即可正常进行登录操作
      进入容器 >>>
#mysql -u root -p 
Enter password: 直接回车(本人遇到的情况)
mysql> set password for root@localhost=password('password'); # 修改密码
mysql> grant all privileges on *.* to 'root'@'%' identified by 'password' with grant option; # 设置远程连接
mysql> flush privileges; # 刷新

my.cnf

详细可在百度查询:

[client]
default-character-set=utf8mb4
#socket   = /data/mysqld/mysqld.sock

[mysql]
default-character-set=utf8mb4

[mysqld]
character-set-server=utf8mb4
#pid-file        = /var/run/mysqld/mysqld.pid
#socket          = /var/run/mysqld/mysqld.sock
#datadir         = /data/mysqldir
log-error      = /data/log/error.log

user = root
#skip-grant-tables
#连接有效时长,默认是28800(8小时)
wait_timeout=28800

#表示表名是否大小写敏感,0-敏感;1-不敏感
lower_case_table_names=1

# 建议禁用符号链接,防止各类安全风险
symbolic-links=0

# 127.0.0.1 可以绑定ip地址或者仅允许本地访问,默认情况下我们只接受来自主机的连接
#bind-address = 127.0.0.1

# MySQL每打开一个表,都会读入一些数据到table_open_cache缓存中,当MySQL在这个缓存中找不到相应信息时,才会去磁盘上读取。默认值64
table_open_cache = 128

# 一个事务,在没有提交的时候,产生的日志,记录到Cache中;等到事务提交需要提交的时候,则把日志持久化到磁盘。默认binlog_cache_size大小32K
binlog_cache_size = 1M

# 定义了用户可以创建的内存表(memory table)的大小。这个值用来计算内存表的最大行数值。这个变量支持动态改变
max_heap_table_size = 8M

# MySQL的heap(堆积)表缓冲大小。所有联合在一个DML指令内完成,并且大多数联合甚至可以不用临时表即可以完成。
tmp_table_size = 16M

# MySQL读入缓冲区大小。对表进行顺序扫描的请求将分配一个读入缓冲区,MySQL会为它分配一段内存缓冲区。read_buffer_size变量控制这一缓冲区的大小。
# 如果对表的顺序扫描请求非常频繁,并且你认为频繁扫描进行得太慢,可以通过增加该变量值以及内存缓冲区大小提高其性能
#read_buffer_size = 2M

# MySQL的随机读缓冲区大小。当按任意顺序读取行时(例如,按照排序顺序),将分配一个随机读缓存区。进行排序查询时,
# MySQL会首先扫描一遍该缓冲,以避免磁盘搜索,提高查询速度,如果需要排序大量数据,可适当调高该值。但MySQL会为每个客户连接发放该缓冲空间,所以应尽量适当设置该值,以避免内存开销过大
read_rnd_buffer_size = 8M

# MySQL执行排序使用的缓冲大小。如果想要增加ORDER BY的速度,首先看是否可以让MySQL使用索引而不是额外的排序阶段。
# 如果不能,可以尝试增加sort_buffer_size变量的大小
sort_buffer_size = 8M

# 联合查询操作所能使用的缓冲区大小,和sort_buffer_size一样,该参数对应的分配内存也是每连接独享
join_buffer_size = 8M

# 这个值(默认8)表示可以重新利用保存在缓存中线程的数量,当断开连接时如果缓存中还有空间,那么客户端的线程将被放到缓存中,
# 如果线程重新被请求,那么请求将从缓存中读取,如果缓存中是空的或者是新的请求,那么这个线程将被重新创建,如果有很多新的线程,
# 增加这个值可以改善系统性能.通过比较Connections和Threads_created状态的变量,可以看到这个变量的作用。(–>表示要调整的值)
# 根据物理内存设置规则如下:
# 1G  —> 8
# 2G  —> 16
# 3G  —> 32
# 大于3G  —> 64
thread_cache_size = 16

# MySQL的查询缓冲大小(从4.0.1开始,MySQL提供了查询缓冲机制)使用查询缓冲,MySQL将SELECT语句和查询结果存放在缓冲区中,
# 今后对于同样的SELECT语句(区分大小写),将直接从缓冲区中读取结果。根据MySQL用户手册,使用查询缓冲最多可以达到238%的效率。
# 通过检查状态值'Qcache_%',可以知道query_cache_size设置是否合理:如果Qcache_lowmem_prunes的值非常大,则表明经常出现缓冲不够的情况,
# 如果Qcache_hits的值也非常大,则表明查询缓冲使用非常频繁,此时需要增加缓冲大小;如果Qcache_hits的值不大,则表明你的查询重复率很低,
# 这种情况下使用查询缓冲反而会影响效率,那么可以考虑不用查询缓冲。此外,在SELECT语句中加入SQL_NO_CACHE可以明确表示不使用查询缓冲
query_cache_size = 64M

# 指定用于索引的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重写),到你能负担得起那样多。如果你使它太大,
# 系统将开始换页并且真的变慢了。对于内存在4GB左右的服务器该参数可设置为384M或512M。通过检查状态值Key_read_requests和Key_reads,
# 可以知道key_buffer_size设置是否合理。比例key_reads/key_read_requests应该尽可能的低,
# 至少是1:100,1:1000更好(上述状态值可以使用SHOW STATUS LIKE 'key_read%'获得)。注意:该参数值设置的过大反而会是服务器整体效率降低
#key_buffer_size = 4M

# 超过30天的binlog删除
expire_logs_days = 30

max_connections=2000

# 慢查询时间 超过1秒则为慢查询
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /data/log/mysql/mysql-slow.log

# 限制Innodb能打开的表的数据,如果库里的表特别多的情况,请增加这个。这个值默认是300
innodb_open_files = 500

# InnoDB使用一个缓冲池来保存索引和原始数据, 不像MyISAM.
# 这里你设置越大,你在存取表里面数据时所需要的磁盘I/O越少.
# 在一个独立使用的数据库服务器上,你可以设置这个变量到服务器物理内存大小的80%
# 不要设置过大,否则,由于物理内存的竞争可能导致操作系统的换页颠簸.
# 注意在32位系统上你每个进程可能被限制在 2-3.5G 用户层面内存限制,
# 所以不要设置的太高.
innodb_buffer_pool_size = 64M

# 使用5.7支持orderby 和去重同时存在,应该尽量避免这种设计
# sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

# 0:如果innodb_flush_log_at_trx_commit的值为0,log buffer每秒就会被刷写日志文件到磁盘,提交事务的时候不做任何操作(执行是由mysql的master thread线程来执行的。
# 主线程中每秒会将重做日志缓冲写入磁盘的重做日志文件(REDO LOG)中。不论事务是否已经提交)默认的日志文件是ib_logfile0,ib_logfile1
# 1:当设为默认值1的时候,每次提交事务的时候,都会将log buffer刷写到日志。
# 2:如果设为2,每次提交事务都会写日志,但并不会执行刷的操作。每秒定时会刷到日志文件。要注意的是,并不能保证100%每秒一定都会刷到磁盘,这要取决于进程的调度。
# 每次事务提交的时候将数据写入事务日志,而这里的写入仅是调用了文件系统的写入操作,而文件系统是有 缓存的,所以这个写入并不能保证数据已经写入到物理磁盘
# 默认值1是为了保证完整的ACID。当然,你可以将这个配置项设为1以外的值来换取更高的性能,但是在系统崩溃的时候,你将会丢失1秒的数据。
# 设为0的话,mysqld进程崩溃的时候,就会丢失最后1秒的事务。设为2,只有在操作系统崩溃或者断电的时候才会丢失最后1秒的数据。InnoDB在做恢复的时候会忽略这个值。
# 总结
# 设为1当然是最安全的,但性能页是最差的(相对其他两个参数而言,但不是不能接受)。如果对数据一致性和完整性要求不高,完全可以设为2,如果只最求性能,例如高并发写的日志服务器,设为0来获得更高性能
innodb_flush_log_at_trx_commit = 0

# 此参数确定些日志文件所用的内存大小,以M为单位。缓冲区更大能提高性能,但意外的故障将会丢失数据。MySQL开发人员建议设置为1-8M之间
innodb_log_buffer_size = 2M

query_cache_type=2

# 服务器发送和接受的最大包长度
max_allowed_packet=64M

# MySQL支持4种事务隔离级别,他们分别是:
# READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE.
# 如没有指定,MySQL默认采用的是REPEATABLE-READ,ORACLE默认的是READ-COMMITTED
transaction_isolation = REPEATABLE-READ

# 强制InnoDB恢复,该选项通常只在存在数据文件异常需要强制恢复时开户
#innodb_force_recovery = 1

# 关闭默认更新时间字段
explicit_defaults_for_timestamp=true

# 设置北京时区
#default-time_zone = '+8:00'

可视化工具连接

docker mysql 的安装_第3张图片

你可能感兴趣的:(学习笔记,docker,mysql,docker)