单实例搭建

规划

卸载自带数据库

  1. rpm -qa | grep mysql
  2. rpm -qa | grep mariadb
  3. rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64

创建用户

  1. groupadd mysql
  2. useradd -g mysql mysql -s /sbin/nologin

解压并创建配置文件及目录

  1. tar xvf mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz -C /usr/local
  2. mv mysql-8.0.19-linux-glibc2.12-x86_64/ mysql

配置文件/etc/my.cnf

  1. [client]
  2. port = 3406
  3. socket = /tmp/mysql.sock
  4. [mysql]
  5. prompt="\u@db \R:\m:\s [\d]> "
  6. no-auto-rehash
  7. [mysqld]
  8. server-id = 3306100
  9. user = mysql
  10. port = 3406
  11. basedir = /usr/local/mysql
  12. datadir = /data/mysql/
  13. socket = /tmp/mysql.sock
  14. pid-file = db.pid
  15. character-set-server = utf8mb4
  16. skip_name_resolve = 1
  17. open_files_limit = 65535
  18. back_log = 1024
  19. max_connections = 512
  20. max_connect_errors = 1000000
  21. table_open_cache = 1024
  22. table_definition_cache = 1024
  23. table_open_cache_instances = 64
  24. thread_stack = 512K
  25. external-locking = FALSE
  26. max_allowed_packet = 32M
  27. sort_buffer_size = 4M
  28. join_buffer_size = 4M
  29. thread_cache_size = 768
  30. interactive_timeout = 600
  31. wait_timeout = 600
  32. tmp_table_size = 32M
  33. max_heap_table_size = 32M
  34. slow_query_log = 1
  35. slow_query_log_file = /data/mysql/slow.log
  36. log-error = /data/mysql/error.log
  37. long_query_time = 0.1
  38. log-bin = /data/mysql/mysql-binlog
  39. sync_binlog = 1
  40. binlog_cache_size = 4M
  41. max_binlog_cache_size = 1G
  42. max_binlog_size = 1G
  43. gtid_mode = on
  44. enforce_gtid_consistency = 1
  45. log_slave_updates
  46. binlog_format = row
  47. relay_log_recovery = 1
  48. relay-log-purge = 1
  49. key_buffer_size = 32M
  50. read_buffer_size = 8M
  51. read_rnd_buffer_size = 4M
  52. bulk_insert_buffer_size = 64M
  53. #myisam_sort_buffer_size = 128M
  54. #myisam_max_sort_file_size = 10G
  55. #myisam_repair_threads = 1
  56. lock_wait_timeout = 3600
  57. explicit_defaults_for_timestamp = 1
  58. innodb_thread_concurrency = 0
  59. innodb_sync_spin_loops = 100
  60. innodb_spin_wait_delay = 30
  61. master_info_repository = TABLE
  62. relay_log_info_repository = TABLE
  63. slave_parallel_type=LOGICAL_CLOCK
  64. transaction_isolation = REPEATABLE-READ
  65. #innodb_additional_mem_pool_size = 16M
  66. innodb_buffer_pool_size = 1024M
  67. innodb_buffer_pool_instances = 8
  68. innodb_buffer_pool_load_at_startup = 1
  69. innodb_buffer_pool_dump_at_shutdown = 1
  70. innodb_data_file_path = ibdata1:1G:autoextend
  71. innodb_flush_log_at_trx_commit = 1
  72. innodb_log_buffer_size = 32M
  73. innodb_log_file_size = 2G
  74. innodb_log_files_in_group = 2
  75. #innodb_max_undo_log_size = 1G
  76. # 根据您的服务器IOPS能力适当调整
  77. # 一般配普通SSD盘的话,可以调整到 10000 - 20000
  78. # 配置高端PCIe SSD卡的话,则可以调整的更高,比如 50000 - 80000
  79. innodb_io_capacity = 4000
  80. innodb_io_capacity_max = 8000
  81. innodb_flush_neighbors = 0
  82. innodb_write_io_threads = 8
  83. innodb_read_io_threads = 8
  84. innodb_purge_threads = 4
  85. innodb_page_cleaners = 4
  86. innodb_open_files = 65535
  87. innodb_max_dirty_pages_pct = 50
  88. innodb_flush_method = O_DIRECT
  89. innodb_lru_scan_depth = 4000
  90. innodb_checksum_algorithm = crc32
  91. #innodb_file_format = Barracuda
  92. #innodb_file_format_max = Barracuda
  93. innodb_lock_wait_timeout = 10
  94. innodb_rollback_on_timeout = 1
  95. innodb_print_all_deadlocks = 1
  96. innodb_file_per_table = 1
  97. innodb_online_alter_log_max_size = 4G
  98. innodb_stats_on_metadata = 0
  99. innodb_status_file = 1
  100. # 注意: 开启 innodb_status_output & innodb_status_output_locks 后, 可能会导致log-error文件增长较快
  101. innodb_status_output = 0
  102. innodb_status_output_locks = 0
  103. #performance_schema
  104. performance_schema = 1
  105. performance_schema_instrument = '%=on'
  106. #innodb monitor
  107. innodb_monitor_enable="module_innodb"
  108. innodb_monitor_enable="module_server"
  109. innodb_monitor_enable="module_dml"
  110. innodb_monitor_enable="module_ddl"
  111. innodb_monitor_enable="module_trx"
  112. innodb_monitor_enable="module_os"
  113. innodb_monitor_enable="module_purge"
  114. innodb_monitor_enable="module_log"
  115. innodb_monitor_enable="module_lock"
  116. innodb_monitor_enable="module_buffer"
  117. innodb_monitor_enable="module_index"
  118. innodb_monitor_enable="module_ibuf_system"
  119. innodb_monitor_enable="module_buffer_page"
  120. innodb_monitor_enable="module_adaptive_hash"
  121. # Group Replication
  122. #server_id = 1003306
  123. #gtid_mode = ON
  124. #enforce_gtid_consistency = ON
  125. #master_info_repository = TABLE
  126. #relay_log_info_repository = TABLE
  127. binlog_checksum = NONE
  128. #log_slave_updates = ON
  129. #log_bin = binlog
  130. #binlog_format= ROW
  131. transaction_write_set_extraction = XXHASH64
  132. # 未来可能被弃用的变量,会出现告警信息,binlog_expire_logs_seconds用来代替
  133. # expire_logs_days = 7
  134. binlog_expire_logs_seconds = 7
  135. # 8版本弃用的变量
  136. # loose-group_replication_group_name = 'e842862c-9b12-11e8-8131-080027f1fd08'
  137. # internal_tmp_disk_storage_engine = InnoDB # 8版本不再支持,默认引擎
  138. # query_cache_size = 0 # 8版本不再支持这两个参数
  139. # query_cache_type = 0
  140. # loose-group_replication_start_on_boot = off
  141. # loose-group_replication_local_address = 'enmoedu:33066'
  142. # loose-group_replication_group_seeds ='enmoedu1:33067,enmoedu2:33068,enmoedu:33066'
  143. # loose-group_replication_bootstrap_group = off
  144. # loose-group_replication_single_primary_mode=off
  145. # loose-group_replication_enforce_update_everywhere_checks=true
  146. [mysqldump]
  147. quick
  148. max_allowed_packet = 32M

创建目录

  1. # 创建数据目录和配置文件目录
  2. mkdir -p /data/mysql/
  3. chown mysql:mysql -R /data/mysql
  4. chown mysql:mysql -R /usr/local/mysql/

初始化服务

  1. cd /usr/local/mysql/bin
  2. ./mysqld --defaults-file=/etc/my.cnf --initialize --basedir=/usr/local/mysql --datadir=/data/mysql --user=mysql

查看密码

  1. more /data/mysql/error.log
  2. 2021-06-07T12:28:36.732739Z 0 [Warning] [MY-011068] [Server] The syntax 'expire-logs-days' is deprecated and will be removed in a future release. Please use binlog_expire_log
  3. s_seconds instead.
  4. 2021-06-07T12:28:36.732982Z 0 [System] [MY-013169] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.19) initializing of server in progress as process 20310
  5. 100 200 300 400 500 600 700 800 900 1000
  6. 100 200 300 400 500 600 700 800 900 1000 1100 1200 1300 1400 1500 1600 1700 1800 1900 2000
  7. 100 200 300 400 500 600 700 800 900 1000 1100 1200 1300 1400 1500 1600 1700 1800 1900 2000
  8. 2021-06-07T12:28:49.385707Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: >ad,tMNX#7,p

添加自动启动

  1. # 使用systemctl来管理mysql
  2. cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
  3. chkconfig --add mysqld
  4. chkconfig mysqld on

启动数据库并修改密码

如果添加到了systemd服务,也可以使用systectl进行管理启动

  1. # 安全启动
  2. ./mysqld_safe --defaults-file=/etc/my.cnf &
  3. # 配置mysql环境变量
  4. echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
  5. source /etc/profile
  6. mysql -uroot -p
  7. alter user 'root'@'localhost' identified by 'root@123';
  8. flush privileges;
  9. # 关闭数据库
  10. ./mysqladmin shutdown -uroot -p'password'

多实例

一台主机多个mysql实例

单机多实例有两种创建方式:

一、本办法;直接解压两份文件进行配置,如下实例1和实例2

二、部署一个服务后多次初始化,简要操作如下:

  1. 创建datadir数据目录,并赋权(所属用户和组)
  2. 使用原来的服务进行多次初始化,初始化时指定新创建的目录
  3. 复制my.cnf配置文件,修改端口和sock和目录位置
  4. 启动服务并修改密码

实例1

解压文件&创建配置文件

  1. groupadd mysql
  2. useradd -g mysql mysql -s /sbin/nologin
  3. tar xvf mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz -C /usr/local
  4. cp -r mysql-8.0.19-linux-glibc2.12-x86_64/ mysql8-1
  5. mkdir /usr/local/mysql8-1/data
  6. mkdir /usr/local/mysql8-1/etc
  7. chown -R mysql:mysql /usr/local/mysql8-1/

/usr/local/mysql8-1/etc/my.cnf

  1. [client]
  2. port = 3406
  3. socket = /usr/local/mysql8-1/mysql.sock
  4. [mysql]
  5. prompt="\u@db \R:\m:\s [\d]> "
  6. no-auto-rehash
  7. [mysqld]
  8. server-id = 3306100
  9. user = mysql
  10. port = 3406
  11. basedir = /usr/local/mysql8-1
  12. datadir = /usr/local/mysql8-1/data
  13. socket = /usr/local/mysql8-1/mysql.sock
  14. pid-file = db.pid
  15. character-set-server = utf8mb4
  16. skip_name_resolve = 1
  17. open_files_limit = 65535
  18. back_log = 1024
  19. max_connections = 512
  20. max_connect_errors = 1000000
  21. table_open_cache = 1024
  22. table_definition_cache = 1024
  23. table_open_cache_instances = 64
  24. thread_stack = 512K
  25. external-locking = FALSE
  26. max_allowed_packet = 32M
  27. sort_buffer_size = 4M
  28. join_buffer_size = 4M
  29. thread_cache_size = 768
  30. interactive_timeout = 600
  31. wait_timeout = 600
  32. tmp_table_size = 32M
  33. max_heap_table_size = 32M
  34. slow_query_log = 1
  35. slow_query_log_file = /usr/local/mysql8-1/data/slow.log
  36. log-error = /usr/local/mysql8-1/data/error.log
  37. long_query_time = 0.1
  38. log-bin = /usr/local/mysql8-1/data/mysql-binlog
  39. sync_binlog = 1
  40. binlog_cache_size = 4M
  41. max_binlog_cache_size = 1G
  42. max_binlog_size = 1G
  43. gtid_mode = on
  44. enforce_gtid_consistency = 1
  45. log_slave_updates
  46. binlog_format = row
  47. relay_log_recovery = 1
  48. relay-log-purge = 1
  49. key_buffer_size = 32M
  50. read_buffer_size = 8M
  51. read_rnd_buffer_size = 4M
  52. bulk_insert_buffer_size = 64M
  53. #myisam_sort_buffer_size = 128M
  54. #myisam_max_sort_file_size = 10G
  55. #myisam_repair_threads = 1
  56. lock_wait_timeout = 3600
  57. explicit_defaults_for_timestamp = 1
  58. innodb_thread_concurrency = 0
  59. innodb_sync_spin_loops = 100
  60. innodb_spin_wait_delay = 30
  61. master_info_repository = TABLE
  62. relay_log_info_repository = TABLE
  63. slave_parallel_type=LOGICAL_CLOCK
  64. transaction_isolation = REPEATABLE-READ
  65. #innodb_additional_mem_pool_size = 16M
  66. innodb_buffer_pool_size = 1024M
  67. innodb_buffer_pool_instances = 8
  68. innodb_buffer_pool_load_at_startup = 1
  69. innodb_buffer_pool_dump_at_shutdown = 1
  70. innodb_data_file_path = ibdata1:1G:autoextend
  71. innodb_flush_log_at_trx_commit = 1
  72. innodb_log_buffer_size = 32M
  73. innodb_log_file_size = 2G
  74. innodb_log_files_in_group = 2
  75. #innodb_max_undo_log_size = 1G
  76. # 根据您的服务器IOPS能力适当调整
  77. # 一般配普通SSD盘的话,可以调整到 10000 - 20000
  78. # 配置高端PCIe SSD卡的话,则可以调整的更高,比如 50000 - 80000
  79. innodb_io_capacity = 4000
  80. innodb_io_capacity_max = 8000
  81. innodb_flush_neighbors = 0
  82. innodb_write_io_threads = 8
  83. innodb_read_io_threads = 8
  84. innodb_purge_threads = 4
  85. innodb_page_cleaners = 4
  86. innodb_open_files = 65535
  87. innodb_max_dirty_pages_pct = 50
  88. innodb_flush_method = O_DIRECT
  89. innodb_lru_scan_depth = 4000
  90. innodb_checksum_algorithm = crc32
  91. #innodb_file_format = Barracuda
  92. #innodb_file_format_max = Barracuda
  93. innodb_lock_wait_timeout = 10
  94. innodb_rollback_on_timeout = 1
  95. innodb_print_all_deadlocks = 1
  96. innodb_file_per_table = 1
  97. innodb_online_alter_log_max_size = 4G
  98. innodb_stats_on_metadata = 0
  99. innodb_status_file = 1
  100. # 注意: 开启 innodb_status_output & innodb_status_output_locks 后, 可能会导致log-error文件增长较快
  101. innodb_status_output = 0
  102. innodb_status_output_locks = 0
  103. #performance_schema
  104. performance_schema = 1
  105. performance_schema_instrument = '%=on'
  106. #innodb monitor
  107. innodb_monitor_enable="module_innodb"
  108. innodb_monitor_enable="module_server"
  109. innodb_monitor_enable="module_dml"
  110. innodb_monitor_enable="module_ddl"
  111. innodb_monitor_enable="module_trx"
  112. innodb_monitor_enable="module_os"
  113. innodb_monitor_enable="module_purge"
  114. innodb_monitor_enable="module_log"
  115. innodb_monitor_enable="module_lock"
  116. innodb_monitor_enable="module_buffer"
  117. innodb_monitor_enable="module_index"
  118. innodb_monitor_enable="module_ibuf_system"
  119. innodb_monitor_enable="module_buffer_page"
  120. innodb_monitor_enable="module_adaptive_hash"
  121. # Group Replication
  122. #server_id = 1003306
  123. #gtid_mode = ON
  124. #enforce_gtid_consistency = ON
  125. #master_info_repository = TABLE
  126. #relay_log_info_repository = TABLE
  127. binlog_checksum = NONE
  128. #log_slave_updates = ON
  129. #log_bin = binlog
  130. #binlog_format= ROW
  131. transaction_write_set_extraction = XXHASH64
  132. # expire_logs_days参数未来可能被弃用的变量,会出现告警信息
  133. binlog_expire_logs_seconds = 7
  134. # 8版本弃用的变量
  135. # loose-group_replication_group_name = 'e842862c-9b12-11e8-8131-080027f1fd08'
  136. # internal_tmp_disk_storage_engine = InnoDB # 8版本不再支持,默认引擎
  137. # query_cache_size = 0 # 8版本不再支持这两个参数
  138. # query_cache_type = 0
  139. # loose-group_replication_start_on_boot = off
  140. # loose-group_replication_local_address = 'enmoedu:33066'
  141. # loose-group_replication_group_seeds ='enmoedu1:33067,enmoedu2:33068,enmoedu:33066'
  142. # loose-group_replication_bootstrap_group = off
  143. # loose-group_replication_single_primary_mode=off
  144. # loose-group_replication_enforce_update_everywhere_checks=true
  145. [mysqldump]
  146. quick
  147. max_allowed_packet = 32M

初始化

  1. cd /usr/local/mysql8-1/bin
  2. ./mysqld --defaults-file=/usr/local/mysql8-1/etc/my.cnf --initialize --user=mysql
  3. # 安全启动
  4. ./mysqld_safe --defaults-file=/usr/local/mysql8-1/etc/my.cnf &
  5. mysql -uroot -S /usr/local/mysql8-1/mysql.sock -p
  6. alter user 'root'@'localhost' identified by 'root@123';
  7. flush privileges;

—initialize:在日志文件打印一个随机密码

—initialize-insecure:不会产生随机密码,第一次登陆数据库使用空密码

实例2

修改配置文件的目录结构和服务监听端口即可

复制文件&创建配置文件

  1. cp -r mysql-8.0.19-linux-glibc2.12-x86_64/ mysql8-2
  2. mkdir /usr/local/mysql8-2/data
  3. mkdir /usr/local/mysql8-2/etc
  4. chown -R mysql:mysql /usr/local/mysql8-2/

/usr/local/mysql8-2/etc/my.cnf

  1. [client]
  2. port = 3506
  3. socket = /usr/local/mysql8-2/mysql.sock
  4. [mysql]
  5. prompt="\u@db \R:\m:\s [\d]> "
  6. no-auto-rehash
  7. [mysqld]
  8. server-id = 3306100
  9. user = mysql
  10. port = 3506
  11. basedir = /usr/local/mysql8-2
  12. datadir = /usr/local/mysql8-2/data
  13. socket = /usr/local/mysql8-2/mysql.sock
  14. pid-file = db.pid
  15. character-set-server = utf8mb4
  16. skip_name_resolve = 1
  17. open_files_limit = 65535
  18. back_log = 1024
  19. max_connections = 512
  20. max_connect_errors = 1000000
  21. table_open_cache = 1024
  22. table_definition_cache = 1024
  23. table_open_cache_instances = 64
  24. thread_stack = 512K
  25. external-locking = FALSE
  26. max_allowed_packet = 32M
  27. sort_buffer_size = 4M
  28. join_buffer_size = 4M
  29. thread_cache_size = 768
  30. interactive_timeout = 600
  31. wait_timeout = 600
  32. tmp_table_size = 32M
  33. max_heap_table_size = 32M
  34. slow_query_log = 1
  35. slow_query_log_file = /usr/local/mysql8-2/data/slow.log
  36. log-error = /usr/local/mysql8-2/data/error.log
  37. long_query_time = 0.1
  38. log-bin = /usr/local/mysql8-2/data/mysql-binlog
  39. sync_binlog = 1
  40. binlog_cache_size = 4M
  41. max_binlog_cache_size = 1G
  42. max_binlog_size = 1G
  43. gtid_mode = on
  44. enforce_gtid_consistency = 1
  45. log_slave_updates
  46. binlog_format = row
  47. relay_log_recovery = 1
  48. relay-log-purge = 1
  49. key_buffer_size = 32M
  50. read_buffer_size = 8M
  51. read_rnd_buffer_size = 4M
  52. bulk_insert_buffer_size = 64M
  53. #myisam_sort_buffer_size = 128M
  54. #myisam_max_sort_file_size = 10G
  55. #myisam_repair_threads = 1
  56. lock_wait_timeout = 3600
  57. explicit_defaults_for_timestamp = 1
  58. innodb_thread_concurrency = 0
  59. innodb_sync_spin_loops = 100
  60. innodb_spin_wait_delay = 30
  61. master_info_repository = TABLE
  62. relay_log_info_repository = TABLE
  63. slave_parallel_type=LOGICAL_CLOCK
  64. transaction_isolation = REPEATABLE-READ
  65. #innodb_additional_mem_pool_size = 16M
  66. innodb_buffer_pool_size = 1024M
  67. innodb_buffer_pool_instances = 8
  68. innodb_buffer_pool_load_at_startup = 1
  69. innodb_buffer_pool_dump_at_shutdown = 1
  70. innodb_data_file_path = ibdata1:1G:autoextend
  71. innodb_flush_log_at_trx_commit = 1
  72. innodb_log_buffer_size = 32M
  73. innodb_log_file_size = 2G
  74. innodb_log_files_in_group = 2
  75. #innodb_max_undo_log_size = 1G
  76. # 根据您的服务器IOPS能力适当调整
  77. # 一般配普通SSD盘的话,可以调整到 10000 - 20000
  78. # 配置高端PCIe SSD卡的话,则可以调整的更高,比如 50000 - 80000
  79. innodb_io_capacity = 4000
  80. innodb_io_capacity_max = 8000
  81. innodb_flush_neighbors = 0
  82. innodb_write_io_threads = 8
  83. innodb_read_io_threads = 8
  84. innodb_purge_threads = 4
  85. innodb_page_cleaners = 4
  86. innodb_open_files = 65535
  87. innodb_max_dirty_pages_pct = 50
  88. innodb_flush_method = O_DIRECT
  89. innodb_lru_scan_depth = 4000
  90. innodb_checksum_algorithm = crc32
  91. #innodb_file_format = Barracuda
  92. #innodb_file_format_max = Barracuda
  93. innodb_lock_wait_timeout = 10
  94. innodb_rollback_on_timeout = 1
  95. innodb_print_all_deadlocks = 1
  96. innodb_file_per_table = 1
  97. innodb_online_alter_log_max_size = 4G
  98. innodb_stats_on_metadata = 0
  99. innodb_status_file = 1
  100. # 注意: 开启 innodb_status_output & innodb_status_output_locks 后, 可能会导致log-error文件增长较快
  101. innodb_status_output = 0
  102. innodb_status_output_locks = 0
  103. #performance_schema
  104. performance_schema = 1
  105. performance_schema_instrument = '%=on'
  106. #innodb monitor
  107. innodb_monitor_enable="module_innodb"
  108. innodb_monitor_enable="module_server"
  109. innodb_monitor_enable="module_dml"
  110. innodb_monitor_enable="module_ddl"
  111. innodb_monitor_enable="module_trx"
  112. innodb_monitor_enable="module_os"
  113. innodb_monitor_enable="module_purge"
  114. innodb_monitor_enable="module_log"
  115. innodb_monitor_enable="module_lock"
  116. innodb_monitor_enable="module_buffer"
  117. innodb_monitor_enable="module_index"
  118. innodb_monitor_enable="module_ibuf_system"
  119. innodb_monitor_enable="module_buffer_page"
  120. innodb_monitor_enable="module_adaptive_hash"
  121. # Group Replication
  122. #server_id = 1003306
  123. #gtid_mode = ON
  124. #enforce_gtid_consistency = ON
  125. #master_info_repository = TABLE
  126. #relay_log_info_repository = TABLE
  127. binlog_checksum = NONE
  128. #log_slave_updates = ON
  129. #log_bin = binlog
  130. #binlog_format= ROW
  131. transaction_write_set_extraction = XXHASH64
  132. # expire_logs_days参数未来可能被弃用的变量,会出现告警信息
  133. binlog_expire_logs_seconds = 7
  134. # 8版本弃用的变量
  135. # loose-group_replication_group_name = 'e842862c-9b12-11e8-8131-080027f1fd08'
  136. # internal_tmp_disk_storage_engine = InnoDB # 8版本不再支持,默认引擎
  137. # query_cache_size = 0 # 8版本不再支持这两个参数
  138. # query_cache_type = 0
  139. # loose-group_replication_start_on_boot = off
  140. # loose-group_replication_local_address = 'enmoedu:33066'
  141. # loose-group_replication_group_seeds ='enmoedu1:33067,enmoedu2:33068,enmoedu:33066'
  142. # loose-group_replication_bootstrap_group = off
  143. # loose-group_replication_single_primary_mode=off
  144. # loose-group_replication_enforce_update_everywhere_checks=true
  145. [mysqldump]
  146. quick
  147. max_allowed_packet = 32M

初始化

  1. cd /usr/local/mysql8-2/bin
  2. ./mysqld --defaults-file=/usr/local/mysql8-2/etc/my.cnf --initialize --user=mysql
  3. # 安全启动
  4. ./mysqld_safe --defaults-file=/usr/local/mysql8-2/etc/my.cnf &
  5. mysql -uroot -S /usr/local/mysql8-2/mysql.soc -p
  6. alter user 'root'@'localhost' identified by 'root@123';
  7. flush privileges;
  8. # 关闭数据库
  9. ./mysqladmin shutdown -uroot -p'password'

主从搭建

主从原理

主从复制是依赖于 binlog 二进制日志,需要注意的是:

  • binlog 是属于 server 层次,各个引擎都有
  • redo log,undo log属于Innodb 引擎层次,用于保证事务性的

主从复制原理:

  • master 上的 binlogdump 线程,在 slave 正常连接的情况下,会将 binlog 二进制日志发送给 slave
  • binlog 二进制日志中记录了 master 上所有的更新操作
  • slave 上有个 I/O 线程,通过读取 master 上的 binlog ,写到自己的中继日志(delay log )中
  • salve 上有个 SQL 线程,通过重放 delay log 里的内容,来实现同步,把中继日志中的事件信息一条一条的在本地执行一次,完成数据在本地的存储, 从而实现将改变反映到它自己的数据(数据重放)。

注意事项:

  • 主从服务器操作系统版本和位数一致;
  • Master 和 Slave 数据库的版本要一致;
  • Master 和 Slave 数据库中的数据要一致;
  • Master 开启二进制日志, Master 和 Slave 的 server_id 在局域网内必须唯一;

简要配置:

  • master
  1. 修改数据库配置文件, 指明 server_id, 开启二进制日志(log-bin);
  2. 启动数据库, 查看当前是哪个日志, position 号是多少;
  3. 登录数据库, 授权数据复制用户(IP 地址为从机 IP 地址, 如果是双向主从, 这里的还需要授权本机的 IP 地址, 此时自己的 IP 地址就是从 IP 地址);
  4. 备份数据库(记得加锁和解锁);
  5. 传送备份数据到 Slave 上;
  6. 启动数据库;
  • salve
  1. 修改数据库配置文件, 指明 server_id, 开启二进制日志(log-bin);
  2. 启动数据库, 还原备份;
  3. 查看当前是哪个日志, position 号是多少(单向主从此步不需要, 双向主从需要);
  4. 指定 Master 的地址、 用户、 密码等信息;
  5. 开启同步, 查看状态。

规划

目录结构 端口 server_id
master /usr/local/mysql8-1/ 3406 3306100
slave /usr/local/mysql8-2/ 3506 3506100

单主机多实例实现主从 -

配置

  1. 检查master节点是否开启二进制日志文件(log-bin)
  2. 检查server_id

没有的添加配置

创建复制操作用户-repl

master

在主节点创建一个用户repl,用于从节点链接主节点时使用。
  1. # 创建用户
  2. mysql> CREATE USER 'repl'@'135.129.12.28' IDENTIFIED WITH mysql_native_password BY 'repl@123';
  3. # 授权
  4. mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'135.129.12.28';
  5. mysql> flush privileges;
  6. # 获取gtid
  7. mysql> show variables like '%gtid%';

localhost根据实际IP

slave

  1. # 设置为master的gtid
  2. SET @@GLOBAL.GTID_PURGED = '08d09f71-c9c2-11eb-8bca-005056b0ed50:1-15';
  3. # change master to master_host = '135.129.12.28',master_port = 3306,master_user = 'repl',master_password = 'repl@123',master_auto_position=1;

MASTER_HOST # master服务IP

Master_Port # master服务端口

MASTER_USER # master复制用户

MASTER_PASSWORD # master复制用户密码

master_auto_position # 1 自动获取之前读取的位置

开启同步

master

  1. # 备份整个数据库 到 slave恢复
  2. mysqldump -uroot -p -h127.0.0.1 -P3306 --opt --hex-blob --single_transaction -R --default-character-set=utf8 --master-data=2 --all-databases>/temp/dbfull3306.sql

slave

  1. # 开启同步
  2. mysql> start slave;
  3. # 查看同步状态
  4. mysql> show slave status\G;

Slave_IO_State值以下表示连接到master

Waiting for master to send event

MySQL服务部署 - 图1

测试

master上创建数据库,查看salve上是否同步到数据

MySQL服务部署 - 图2MySQL服务部署 - 图3

取消主从

slave

  1. mysql>stop slave;
  2. QueryOK, 0 rowsaffected (0,00 sec)
  3. mysql>reset slave all;
  4. # or
  5. mysql>reset master;
  6. QueryOK, 0 rowsaffected (0,04 sec)
  7. mysql> show slave status\G
  8. Emptyset (0,00 sec)
  9. 此时真正实现了清除slave同步复制关系!

级联复制

A -> B -> C

步骤和上面一样