Maison >base de données >tutoriel mysql >Installation de plusieurs instances MySQL
Étape 1. Préparation
Fermez le pare-feu ; installez les dépendances MySQL ; Utilisez la bibliothèque libaio ; téléchargez, décompressez et renommez le fichier exécutable MySQL ; créez de nouveaux groupes d'utilisateurs et utilisateurs et les autres préparations ne seront pas décrites ici.
Le répertoire du fichier exécutable est /data/mysql57
Ajouter des instructions d'utilisateur et de groupe
groupadd mysql useradd mysql -g mysql
Étape 2 . Ajoutez des variables d'environnement
Dans le fichier /etc/profile, ajoutez PATH=${PATH}:/data/mysql57/bin/
Après avoir enregistré, comme To. prendre effet immédiatement, exécutez la source /etc/profile.
Exécuter
mkdir -p mysql3306/data mysql3306/mysql_log mysql3306/tmp mysql3307/data mysql3307/mysql_log mysql3307/tmp mysqld_multi/logdans les données répertoire racine
Cette étape est essentielle pour créer un fichier journal.
touch /data/mysql3306/mysql_log/mysql3306.errtouch /data/mysql3307/mysql_log/mysql3307.err
Donner des autorisations de répertoire et de fichier
chown -R mysql.mysql mysql3* mysqld_multi
Dans ce cas de test, mysql57 est copié à partir d'autres services, non téléchargé et décompressé directement, donc les deux suivantes sont ajoutées à l'opération d'autorisation d'étape.
chmod -R 755 /data/mysql57/binrrree
étape 4. Modifier my.cnf
chmod -R 755 /data/mysql57/support-files
étape 5. Initialiser l'instance
Initialisez l'instance du port 3306, faites attention au mot de passe temporaire généré.
[client] host=localhost socket = /tmp/mysql.sock default-character-set=utf8mb4 #loose-local-infile=0 [mysqld] user=mysql log_bin_trust_function_creators=1 secure_file_priv='/tmp' ########server setting####### sql_mode = "ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" character-set-server=utf8mb4 collation_server=utf8mb4_unicode_ci lower_case_table_names = 0 skip_name_resolve = 1 #max_connect_errors = 1000 max_connections = 2000 thread_cache_size=256 #thread_stack= 262144 #back_log=80 max_allowed_packet = 134217728 event_scheduler = 1 local-infile=0 #lower_case_table_names = 1 explicit_defaults_for_timestamp = 1 expire_logs_days = 7 log_bin_trust_function_creators =1 ####.frm/.ibd files qty related open_files_limit=65535 innodb_open_files=65535 table_open_cache=65535 table_definition_cache=65535 #### seesion buffer related read_buffer_size = 262144 read_rnd_buffer_size = 524288 sort_buffer_size = 8388608 join_buffer_size = 8388608 ####memory table size tmp_table_size =67108864 max_heap_table_size=67108864 ####timeout interactive_timeout = 1800 wait_timeout = 1800 # connect_timeout=10 ########slow query ######## slow_query_log = 1 log_slow_slave_statements = 1 #log_queries_not_using_indexes = 1 log_throttle_queries_not_using_indexes = 10 long_query_time = 1 #min_examined_row_limit = 10000 ########innodb settings######## innodb_buffer_pool_size = 10737418240 innodb_buffer_pool_instances = 16 innodb_buffer_pool_dump_pct = 40 innodb_lru_scan_depth = 2048 innodb_page_cleaners = 16 #innodb_purge_threads = 4 innodb_sort_buffer_size = 67108864 #innodb_file_per_table = 1 #innodb_flush_log_at_trx_commit = 1 innodb_undo_log_truncate = 1 innodb_undo_tablespaces = 3 innodb_max_undo_log_size = 2147483648 innodb_purge_rseg_truncate_frequency = 128 innodb_log_file_size = 1073741824 innodb_log_files_in_group = 3 innodb_log_buffer_size = 16777216 innodb_flush_method = O_DIRECT innodb_flush_neighbors = 0 innodb_print_all_deadlocks = 1 innodb_strict_mode = 1 #innodb_lock_wait_timeout = 50 innodb_io_capacity = 32768 innodb_io_capacity_max = 65536 innodb_thread_concurrency = 32 innodb_write_io_threads = 8 innodb_read_io_threads = 8 ########replication settings######## master_info_repository = TABLE relay_log_info_repository = TABLE gtid_mode = on enforce_gtid_consistency = 1 binlog_gtid_simple_recovery=1 relay_log_recovery = 1 slave-parallel-type = LOGICAL_CLOCK slave-parallel-workers = 16 slave_transaction_retries=128 slave_preserve_commit_order=1 log_slave_updates=1 binlog_format = ROW log_timestamps=system binlog_rows_query_log_events = 1 binlog_row_image='full' slave_skip_errors = ddl_exist_errors ########semi sync replication settings######## ##plugin_dir=/data/mysql/plugin/ #plugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so" #rpl_semi_sync_master_enabled = 1 #rpl_semi_sync_master_timeout = 5000 #rpl_semi_sync_slave_enabled = 1 [mysqld_multi] mysqld = /data/mysql57/bin/mysqld_safe mysqladmin = /data/mysql57/bin/mysqladmin log = /data/mysqld_multi/log/mysqld_multi.log [mysqld3306] basedir = /data/mysql57 mysqladmin=mysqladmin datadir=/data/mysql3306/data port=3306 server_id=102473306 socket= /tmp/mysql_3306.sock tmpdir = /data/mysql3306/tmp pid-file = /data/mysql3306/mysql_log/mysql3306.pid slow_query_log_file = /data/mysql3306/mysql_log/mysql3306_slow_new.log log-error = /data/mysql3306/mysql_log/mysql3306.err general_log_file= /data/mysql3306/mysql_log/mysql3306.genlog log-bin = /data/mysql3306/mysql_log/mysql3306_bin relay_log = /data/mysql3306/mysql_log/relay3306.log innodb_buffer_pool_size = 90G innodb_buffer_pool_instances = 8 [mysqld3307] basedir = /data/mysql57 mysqladmin=mysqladmin datadir=/data/mysql3307/data port=3307 server_id=102473307 socket= /tmp/mysql_3307.sock tmpdir = /data/mysql3307/tmp pid-file = /data/mysql3307/mysql_log/mysql3307.pid slow_query_log_file = /data/mysql3307/mysql_log/mysql3307_slow_new.log log-error = /data/mysql3307/mysql_log/mysql3307.err general_log_file= /data/mysql3307/mysql_log/mysql3307.genlog log-bin = /data/mysql3307/mysql_log/mysql3307_bin relay_log = /data/mysql3307/mysql_log/relay3307.log innodb_buffer_pool_size = 90G innodb_buffer_pool_instances = 8 [mysqldump] quick
Initialisez l'instance du port 3307, faites attention au mot de passe temporaire généré.
/data/mysql57/bin/mysqld --defaults-file=/etc/my.cnf --initialize --user=mysql --basedir=/data/mysql57 --datadir=/data/mysql3306/data
étape 6. Copiez et générez mysqld_multi et ajoutez-le au démarrage
/data/mysql57/bin/mysqld --defaults-file=/etc/my.cnf --initialize --user=mysql --basedir=/data/mysql57 --datadir=/data/mysql3307/data
cp /data/mysql57/support-files/mysqld_multi.server /etc/init.d/mysqld_multi
étape 7. Plusieurs instances de Mysqld Open
Ouvrir toutes les instances
chkconfig --add mysqld_multi
Afficher l'état d'ouverture (afficher l'état de toutes les instances)
mysqld_multi start
Ouvrir l'instance spécifiée
Ouvrez [mysqld3306] dans /etc/my.cnf où le numéro après mysqld est l'étiquette, par exemple, l'étiquette 3306
mysqld_multi report
ouvre également l'instance d'étiquette 3307
mysqld_multi start 3306
(remarque : ici, il n'y a aucune mention de l'arrêt de l'instance via la commande mysqld_multi stop. Pourquoi pas, car la commande n'est pas valide. L'opération de l'étape 9 la rendra valide)
La connexion multi-instance nécessite de spécifier le paramètre socket
La méthode de connexion au 3306. L'instance dans ce test est :
mysqld_multi start 3307
étape 9. Accordez l'autorisation d'arrêter l'instance via mysqld_multi stop.
Pour fermer l'instance, vous devez configurer l'utilisateur root et le mot de passe, et modifier le fichier /etc/my.cnf.
Ajoutez
mysql -S /tmp/mysql_3306.sock -uroot --port 3306 -p
dans la position [client] car le mot de passe du compte doit être conservé dans le fichier, ce qui constitue un risque de sécurité. La nécessité de le configurer ainsi dans l'environnement réel dépend de la situation spécifique et des exigences de sécurité.
Après les étapes ci-dessus, 2 instances MySQL ont été installées avec succès sur ce serveur, une avec le port 3306 et l'autre avec le port 3307
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!