暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

使用Docker在生产环境部署MySQL 5.7.34、配置防火墙、个性化MySQL配置文件【测试成功】

巴韭特锁螺丝 2024-04-14
284

一、需求背景

    因机房频繁断电,采用传统MySQL数据库部署方式崩溃俩次,导致数据丢失,更换俩台服务器均出现此情况,故考虑更换MySQL部署方式。

二、Docker运行MySQL

1、版本信息

    [root@MySQL-WQ conf]# docker -v
    Docker version 19.03.12build 48a66213fe

    2、拉取镜像: docker pull mysql:5.7.34

    报错:

      root@MySQL-WQ ~]# docker pull mysql:5.7.34
      Error response from daemon:
      Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io on [::1]:53: read udp [::1]:56229->[::1]:53: read: connection refused

      解决:添加国内镜像源即可

        yum-config-manager     --add-repo     http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

        3、创建挂载目录并运行容器

          # 宿主机创建数据存放目录映射到容器
          mkdir -p usr/local/docker_data/mysql/data


          # 宿主机创建配置文件目录映射到容器
          mkdir -p usr/local/docker_data/mysql/conf #(需要在此目录下创建"conf.d"、"mysql.conf.d"两个目录)
          mkdir -p usr/local/docker_data/mysql/conf/conf.d # (建议在此目录创建my.cnf文件并进行相关MySQL配置)
          mkdir -p usr/local/docker_data/mysql/conf/mysql.conf.d


          # 宿主机创建日志目录映射到容器
          mkdir -p usr/local/docker_data/mysql/logs




          # CentOS 7 不建议用这个命令
          docker run --name mysql5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d -v usr/local/docker_data/mysql/data:/var/lib/mysql -v usr/local/docker_data/mysql/conf:/etc/mysql/ -v usr/local/docker_data/mysql/logs:/var/log/mysql mysql:5.7


          # 经测试上面这行命令在 CentOS 7 下目录挂载失败。
          # 在上面这行命令的基础上增加了--privileged=true参数,让容器拥有真正的root权限
          docker run --privileged=true --name mysql5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d  -v /usr/local/docker_data/mysql/data:/var/lib/mysql -v /usr/local/docker_data/mysql/conf:/etc/mysql/ -v /usr/local/docker_data/mysql/logs:/var/log/mysql mysql:5.7

          此时使用docker ps看到容器正常运行,即创建成功。

          三、配置MySQL

          1、配置数据库账号远程访问

            docker exec -it mysql5.7 bash
            mysql -u root -p
            # 创建用户并开启远程登录
            CREATE USER '你的账号'@'%' IDENTIFIED BY '你的密码';




            # 创建数据库并设置字符集
            CREATE DATABASE `库名` CHARACTER SET 'utf8mb4';




            # 给账号授权数据库
            GRANT ALL PRIVILEGES ON `库名`.* TO '你的账号'@'%';




            # 刷新权限
            FLUSH PRIVILEGES;


            配置完成后,用客户端连接报错Access denied

              [root@MySQL-WQ ~]# mysql -uroot -P13306 -p --socket=/usr/local/Yinling/mysql/mysql.sock
              Enter password:
              ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

              解决:加入--protocol参数

                mysql -uroot -P13306 -p --host=127.0.0.1 --protocol=TCP
                  成功连接命令如下:
                  mysql -uroot -h10.18.x.x  -P13306 -pyl123456 --socket=/usr/local/Yinling/mysql/mysql.sock   --protocol=TCP

                      同时,也可使用Navicat进行连接测试。

                      防火墙规则放行:(如果开启了防火墙,该数据库应该设置允许被访问,命令如下)

                    查看防火墙状态,并列出防火墙条目:
                    systemctl status firewalld
                    firewall-cmd --list-all
                      firewall-cmd --zone=public --add-port=13306/tcp --permanent
                      firewall-cmd --zone=public --add-source=192.168.207.22 --permanent
                      firewall-cmd --reload

                      2、调整数据库配置文件

                          配置文件路径: /usr/local/docker_data/mysql/conf

                          配置文件内容如下:

                        [mysqld]
                        server_id = 1
                        port = 3306
                        character-set-server = utf8
                        collation-server = utf8_general_ci
                        sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO
                        lower_case_table_names = 1
                        #lower_case_file_system = 1
                        transaction-isolation = READ-COMMITTED
                        default-time_zone = '+8:00'
                        log_timestamps = SYSTEM


                        log_bin=mysql-bin
                        expire_logs_days=30
                        binlog_format=ROW
                        ###############################
                        innodb_buffer_pool_size = 8G
                        innodb_log_file_size=128M
                        innodb_log_files_in_group=4
                        innodb_log_buffer_size=16M
                        innodb_write_io_threads = 8
                        innodb_read_io_threads = 8
                        innodb_max_dirty_pages_pct = 90
                        innodb_lock_wait_timeout = 120
                        innodb-file-per-table=1
                        auto_increment_increment=1
                        auto_increment_offset=1
                        connect_timeout=10
                        group_concat_max_len=1024
                        innodb_thread_concurrency=0
                        innodb_thread_sleep_delay=10000
                        innodb_write_io_threads=12
                        interactive_timeout=28800
                        lock_wait_timeout=31536000
                        long_query_time=10.000000
                        low_priority_updates=OFF
                        max_allowed_packet=500M
                        max_connect_errors=999999999
                        max_connections=1600
                        max_length_for_sort_data=1024
                        max_prepared_stmt_count=16382
                        max_user_connections=0
                        net_read_timeout=30
                        net_retry_count=10
                        net_write_timeout=60
                        ngram_token_size=2
                        open_files_limit=102400
                        performance_schema=OFF
                        query_alloc_block_size=8192
                        query_cache_limit=1048576
                        query_cache_size=1024M
                        query_cache_type=OFF
                        query_cache_wlock_invalidate=OFF
                        query_prealloc_size=8192
                        slow_launch_time=2
                        table_definition_cache=768
                        table_open_cache=512
                        table_open_cache_instances=16
                        thread_cache_size=512
                        tmp_table_size=1073741824
                        wait_timeout=2147483
                        interactive_timeout=3153600
                        explicit_defaults_for_timestamp = true
                        log-bin-trust-function-creators = 1


                            常见配置:

                            1、设置数据库不区分大小写,避免报错情况产生。

                            参数:lower_case_table_names = 1  #1表示不区分大小写,0表示区分大小写

                            验证:show variables like '%case%';

                          mysql> show variables like '%case%';
                          +------------------------+-------+
                          | Variable_name | Value |
                          +------------------------+-------+
                          | lower_case_file_system | OFF |
                          | lower_case_table_names | 1 |
                          +------------------------+-------+
                          2 rows in set (0.00 sec)

                          2、开启binlog日志

                             配置参数:

                            log_bin=mysql-bin
                            expire_logs_days=30
                            binlog_format=ROW

                                验证:show variables like '%log_bin%';

                              mysql> show variables like '%log_bin%';
                              +---------------------------------+--------------------------------+
                              | Variable_name | Value |
                              +---------------------------------+--------------------------------+
                              | log_bin | ON |
                              | log_bin_basename | /var/lib/mysql/mysql-bin |
                              | log_bin_index | /var/lib/mysql/mysql-bin.index |
                              | log_bin_trust_function_creators | ON |
                              | log_bin_use_v1_row_events | OFF |
                              | sql_log_bin | ON |
                              +---------------------------------+--------------------------------+
                              6 rows in set (0.00 sec)


                              修改完毕后,执行重启,即可生效。

                                docker restart  mysql5.7


                                文章转载自巴韭特锁螺丝,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                评论