1、应用场景:
使用docker-compose 部署后台系统、nacos、seata 时,由于他们都各有自己的一个数据库,且在容器启动的时候要保证这三个数据库都创建完成,否则后台系统起不来,或者nacos 报错找不到数据库,seata 一样
2、构建数据:
执行docker-compose up -d
1)目录结构:
2)test1_db.sql
-- ---------------------------- -- 创建数据库 -- ---------------------------- drop database IF EXISTS test1_db; CREATE DATABASE test1_db DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; use test1_db SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for test_table -- ---------------------------- DROP TABLE IF EXISTS `test_table`; CREATE TABLE `test_table` ( `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact; SET FOREIGN_KEY_CHECKS = 1;
3) test2_db.sql
-- ---------------------------- -- 创建数据库 -- ---------------------------- drop database IF EXISTS test2_db; CREATE DATABASE test2_db DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; use test2_db SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for test2_table -- ---------------------------- DROP TABLE IF EXISTS `test2_table`; CREATE TABLE `test2_table` ( `id` int(11) NOT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact; SET FOREIGN_KEY_CHECKS = 1;
4) init.sql
-- ---------------------------- -- 执行顺序 -- ---------------------------- source /opt/db/test1_db.sql; source /opt/db/test2_db.sql
5) mysqld.cnf
[client] port=3306 socket = /var/run/mysqld/mysqld.sock [mysql] no-auto-rehash auto-rehash default-character-set=utf8mb4 [mysqld] ###basic settings server-id = 2 pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql #log-error = /var/lib/mysql/error.log # By default we only accept connections from localhost #bind-address = 127.0.0.1 # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 character-set-server = utf8mb4 sql_mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" default-storage-engine=INNODB transaction_isolation = READ-COMMITTED auto_increment_offset = 1 connect_timeout = 20 max_connections = 3500 wait_timeout=86400 interactive_timeout=86400 interactive_timeout = 7200 log_bin_trust_function_creators = 1 wait_timeout = 7200 sort_buffer_size = 32M join_buffer_size = 128M max_allowed_packet = 1024M tmp_table_size = 2097152 explicit_defaults_for_timestamp = 1 read_buffer_size = 16M read_rnd_buffer_size = 32M query_cache_type = 1 query_cache_size = 2M table_open_cache = 1500 table_definition_cache = 1000 thread_cache_size = 768 back_log = 3000 open_files_limit = 65536 skip-name-resolve ########log settings######## log-output=FILE general_log = ON general_log_file=/var/lib/mysql/general.log slow_query_log = ON slow_query_log_file=/var/lib/mysql/slowquery.log long_query_time=10 #log-error=/var/lib/mysql/error.log log_queries_not_using_indexes = OFF log_throttle_queries_not_using_indexes = 0 #expire_logs_days = 120 min_examined_row_limit = 100 ########innodb settings######## innodb_io_capacity = 4000 innodb_io_capacity_max = 8000 innodb_buffer_pool_size = 6144M innodb_file_per_table = on innodb_buffer_pool_instances = 20 innodb_buffer_pool_load_at_startup = 1 innodb_buffer_pool_dump_at_shutdown = 1 innodb_log_file_size = 300M innodb_log_files_in_group = 2 innodb_log_buffer_size = 16M innodb_undo_logs = 128 #innodb_undo_tablespaces = 3 #innodb_undo_log_truncate = 1 #innodb_max_undo_log_size = 2G innodb_flush_method = O_DIRECT innodb_flush_neighbors = 1 innodb_purge_threads = 4 innodb_large_prefix = 1 innodb_thread_concurrency = 64 innodb_print_all_deadlocks = 1 innodb_strict_mode = 1 innodb_sort_buffer_size = 64M innodb_flush_log_at_trx_commit=1 innodb_autoextend_increment=64 innodb_concurrency_tickets=5000 innodb_old_blocks_time=1000 innodb_open_files=65536 innodb_stats_on_metadata=0 innodb_file_per_table=1 innodb_checksum_algorithm=0 #innodb_data_file_path=ibdata1:60M;ibdata2:60M;autoextend:max:1G innodb_data_file_path = ibdata1:12M:autoextend #innodb_temp_data_file_path = ibtmp1:500M:autoextend:max:20G #innodb_buffer_pool_dump_pct = 40 #innodb_page_cleaners = 4 #innodb_purge_rseg_truncate_frequency = 128 binlog_gtid_simple_recovery=1 #log_timestamps=system ############## delayed_insert_limit = 100 delayed_insert_timeout = 300 delayed_queue_size = 1000 delay_key_write = ON disconnect_on_expired_password = ON div_precision_increment = 4 end_markers_in_json = OFF eq_range_index_dive_limit = 10 innodb_adaptive_flushing = ON innodb_adaptive_hash_index = ON innodb_adaptive_max_sleep_delay = 150000 #innodb_additional_mem_pool_size = 2097152 innodb_autoextend_increment = 64 innodb_autoinc_lock_mode = 1
6) dockerfile
# 基础镜像 FROM mysql:5.7 # author MAINTAINER j ADD mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf
7) docker-compose.yml
version : '3.8' services: mysql: container_name: mysql image: mysql:5.7 build: context: ./mysql ports: - "3306:3306" volumes: - ./mysql/db:/opt/db - ./mysql/init:/docker-entrypoint-initdb.d/ command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci environment: MYSQL_ROOT_PASSWORD: 123123 restart: always
3、执行docker-compose up -d
4、连接数据库