Две версии MySQL на Windows 10
Узелок на память. Устанавливал Apache, PHP и MySQL под Windows 10. Мне нужно несколько версий PHP и две версии MySQL. В основном использовал руководство на сайте HackWare.ru, но некоторые моменты решил записать на память. В основном, это по поводу двух версий MySQL, потому что разные версии PHP уже приходилось устанавливать раньше (см. здесь).
Перед запуском сервера MySQL нужно инициализировать каталог данных
> D:/web-server/mysql80/bin/mysqld --initialize|--initialize-insecure --console
Есть два способа сделать это — с незначительными отличиями
- Использовать
--initialize
для «безопасной по умолчанию» установки (то есть, включая генерацию случайного начального пароляroot
). В этом случае пароль помечается как просроченный и необходимо установить новый. - Использовать
--initialize-insecure
, при этом парольroot
не генерируется. Предполагается, что пароль будет задан позже, перед запуском сервера в эксплуатацию.
После инициализации каталога данных, сервер MySQL завершает работу. Чтобы установить или изменить пароль root
— нужно запустить сервер. При этом, в отличие от запуска для инициализации каталога данных, сервер прочитает настройки из файла конфигурации.
%WINDIR%\my.ini, %WINDIR%\my.cnf, C:\my.ini, C:\my.cnf, BASEDIR\my.ini, BASEDIR\my.cnf
> D:/web-server/mysql80/bin/mysqld --console
При использовании --initialize
случайный пароль будет показан как результат выполнения инициализации. Кроме того, пароль можно посмотреть в логе ошибок, это файл EVGCOMP.err
в каталоге данных (здесь EVGCOMP
— имя компьютера).
A temporary password is generated for root@localhost: Ap0iP7ihdIeV
После этого можно подключться к серверу базы данных и установить пароль
> mysql -u root -p Enter password: здесь-случайный-пароль > ALTER USER 'root'@'localhost' IDENTIFIED BY 'здесь-новый-пароль'; > FLUSH PRIVILEGES; > exit
При использовании --initialize-insecure
нужно подключиться к серверу с использованием опции --skip-password
и установить пароль.
> mysql -u root --skip-password > ALTER USER 'root'@'localhost' IDENTIFIED BY 'здесь-новый-пароль'; > FLUSH PRIVILEGES; > exit
При подключении к серверу нужно помнить, что опции подключения клиента зависят от настроек сервера. Если сервер принимает подключения только через unix-socket (или named pipe), то попытка подключения через сетевой интерфейс потерпит неудачу. Пароль для 'root'@'localhost'
— не то же самое, что пароль для 'root'@'127.0.0.1'
.
Например, для сервера заданы настройки принимать соединения только через named pipe и игнорировать попытки сетевых соединений даже через интерфейс обратной петли. При этом имя named pipe указано как MySQL80
, то есть отличается от значения по умолчанию MySQL
.
[mysqld] basedir = D:/web-server/mysql80 datadir = D:/work/mysql80 # Запрещаем работу по сети, даже через интерфейс обратной петли skip-networking = on # В Windows вместо unix-сокетов используются именованные каналы enable-named-pipe # В Windows для named pipe значение по умолчанию равно MySQL socket = MySQL80 # Разрешаем принимать сетевые соединения на всех интерфейсах # bind-address = 0.0.0.0 # Разрешаем принимать только локальные соединения на 127.0.0.1 # bind-address = 127.0.0.1 # Принимать соединения на указанном интерфейсе на порту 3306 # port = 3306
Клиент при подключении должен указать, что подключение будет через named pipe и имя именованного канала — MySQL80
.
> mysql -uroot -pqwerty --pipe --socket=MySQL80
Кроме того, все утилиты, входящие в состав поставки MySQL, например mysql
или mysqladmin
, умеют считывать значения из секции [client]
файла конфигурации my.ini
.
[client] host = localhost pipe socket = MySQL80
Остановить запущенный сервер MySQL можно с помощью утилиты mysqladmin
.
> mysqladmin -uroot -pqwerty --pipe --socket=MySQL80 shutdown
Итак, можно работать по сети или через named pipe (или unix-socket). По сети можно принимать только локальные соединения через интерфейс обратной петли или же принимать внешние соединения на указанном интерфейсе.
# Разрешаем серверу базы данных принимать сетевые соединения skip-networking = off # В Windows вместо unix-сокетов используются именованные каналы enable-named-pipe # В Windows для named pipe значение по умолчанию равно MySQL socket = MySQL80 # Разрешаем принимать сетевые соединения на всех интерфейсах # bind-address = 0.0.0.0 # Разрешаем принимать только локальные соединения на 127.0.0.1 bind-address = 127.0.0.1 # Принимать соединения на указанном интерфейсе на порту 3306 port = 3306
Следует помнить, что если клиент в качестве значения host
указывает localhost
или вообще не указывает host
— подключение будет через named pipe (unix-socket). Для подключения по сети следует указывать значение 127.0.0.1
.
> mysql -uroot -pqwerty # работа через named pipe, потому что host по умолчанию localhost > mysql -uroot -pqwerty -hlocalhost # работа через named pipe, потому что host=localhost > mysql -uroot -pqwerty -h127.0.0.1 -P3305 # работа через loopback на порту 3305
Чтобы две версии MySQL работали на одном компьютере, нужно чтобы named pipe и порт отличались.
[mysqld] basedir = D:/web-server/mysql80 datadir = D:/work/mysql80 default_authentication_plugin = mysql_native_password default-time-zone = '+00:00' # Запрещаем (on) или разрешаем (off) принимать сетевые соединения skip-networking = off # В Windows вместо unix-сокетов используются именованные каналы enable-named-pipe # В Windows для named pipe значение по умолчанию равно MySQL socket = MySQL80 # Разрешаем принимать сетевые соединения на всех интерфейсах # bind-address = 0.0.0.0 # Разрешаем принимать только локальные соединения на 127.0.0.1 bind-address = 127.0.0.1 # Принимать соединения на указанном интерфейсе на порту 3306 port = 3306 log-output = FILE # Включать только при необходимости, файл лога растет быстро general-log = 1 general_log_file = D:/work/mysql-log/mysql80-general.log.txt log_error = D:/work/mysql-log/mysql80-error.log.txt [client] host = localhost pipe socket = MySQL80
[mysqld] basedir = D:/web-server/mysql57 datadir = D:/work/mysql57 default_authentication_plugin = mysql_native_password default-time-zone = '+00:00' # Запрещаем (on) или разрешаем (off) принимать сетевые соединения skip-networking = off # В Windows вместо unix-сокетов используются именованные каналы enable-named-pipe # В Windows для named pipe значение по умолчанию равно MySQL socket = MySQL57 # Разрешаем принимать сетевые соединения на всех интерфейсах # bind-address = 0.0.0.0 # Разрешаем принимать только локальные соединения на 127.0.0.1 bind-address = 127.0.0.1 # Принимать соединения на указанном интерфейсе на порту 3305 port = 3305 log-output = FILE # Включать только при необходимости, файл лога растет быстро general-log = 1 general_log_file = D:/work/mysql-log/mysql57-general.log.txt log_error = D:/work/mysql-log/mysql57-error.log.txt [client] host = localhost pipe socket = MySQL57
Установить MySQL в качестве службы Windows, чтобы сервер запускался при загрузке (cmd
от имени администратора)
> D:/web-server/mysql80/bin/mysqld --install MySQL80 > D:/web-server/mysql57/bin/mysqld --install MySQL57
Здесь MySQL80
и MySQL57
— имя службы, если не указывать — будет использовано значение по умолчанию MySQL
.
И еще один момент, о котором следует помнить — у нас теперь две директории bin
, где расположены утилиты mysql
, mysqladmin
, mysqldump
. В переменную PATH
можно добавить путь к директории bin
только для одного сервера. При запуске утилит, путь к которым не прописан в PATH
— нужно указывать полный путь.
> mysql --help mysql Ver 8.0.33 for Win64 on x86_64 (MySQL Community Server - GPL) Copyright (c) 2000, 2023, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Usage: mysql [OPTIONS] [database] -?, --help Display this help and exit. -I, --help Synonym for -? --auto-rehash Enable automatic rehashing. One doesn't need to use 'rehash' to get table and field completion, but startup and reconnecting may take a longer time. Disable with --disable-auto-rehash. (Defaults to on; use --skip-auto-rehash to disable.) -A, --no-auto-rehash No automatic rehashing. One has to use 'rehash' to get table and field completion. This gives a quicker start of mysql and disables rehashing on reconnect. --auto-vertical-output Automatically switch to vertical output mode if the result is wider than the terminal width. -B, --batch Don't use history file. Disable interactive behavior. (Enables --silent.) --bind-address=name IP address to bind to. --binary-as-hex Print binary data as hex. Enabled by default for interactive terminals. --character-sets-dir=name Directory for character set files. --column-type-info Display column type information. -c, --comments Preserve comments. Send comments to the server. The default is --skip-comments (discard comments), enable with --comments. -C, --compress Use compression in server/client protocol. -#, --debug[=#] This is a non-debug version. Catch this and exit. --debug-check This is a non-debug version. Catch this and exit. -T, --debug-info This is a non-debug version. Catch this and exit. -D, --database=name Database to use. --default-character-set=name Set the default character set. --delimiter=name Delimiter to be used. --enable-cleartext-plugin Enable/disable the clear text authentication plugin. -e, --execute=name Execute command and quit. (Disables --force and history file.) -E, --vertical Print the output of a query (rows) vertically. -f, --force Continue even if we get an SQL error. --histignore=name A colon-separated list of patterns to keep statements from getting logged into syslog and mysql history. -G, --named-commands Enable named commands. Named commands mean this program's internal commands; see mysql> help . When enabled, the named commands can be used from any line of the query, otherwise only from the first line, before an enter. Disable with --disable-named-commands. This option is disabled by default. -i, --ignore-spaces Ignore space after function names. --init-command=name SQL Command to execute when connecting to MySQL server. Will automatically be re-executed when reconnecting. --local-infile Enable/disable LOAD DATA LOCAL INFILE. -b, --no-beep Turn off beep on error. -h, --host=name Connect to host. --dns-srv-name=name Connect to a DNS SRV resource -H, --html Produce HTML output. -X, --xml Produce XML output. --line-numbers Write line numbers for errors. (Defaults to on; use --skip-line-numbers to disable.) -L, --skip-line-numbers Don't write line number for errors. -n, --unbuffered Flush buffer after each query. --column-names Write column names in results. (Defaults to on; use --skip-column-names to disable.) -N, --skip-column-names Don't write column names in results. --sigint-ignore Ignore SIGINT (CTRL-C). -o, --one-database Ignore statements except those that occur while the default database is the one named at the command line. -p, --password[=name] Password to use when connecting to server. If password is not given it's asked from the tty. -,, --password1[=name] Password for first factor authentication plugin. -,, --password2[=name] Password for second factor authentication plugin. -,, --password3[=name] Password for third factor authentication plugin. -W, --pipe Use named pipes to connect to server. -P, --port=# Port number to use for connection or 0 for default to, in order of preference, my.cnf, $MYSQL_TCP_PORT, /etc/services, built-in default (3306). --prompt=name Set the mysql prompt to this value. --protocol=name The protocol to use for connection (tcp, socket, pipe, memory). -q, --quick Don't cache result, print it row by row. This may slow down the server if the output is suspended. Doesn't use history file. -r, --raw Write fields without conversion. Used with --batch. --reconnect Reconnect if the connection is lost. Disable with --disable-reconnect. This option is enabled by default. (Defaults to on; use --skip-reconnect to disable.) -s, --silent Be more silent. Print results with a tab as separator, each row on new line. --shared-memory-base-name=name Base name of shared memory. -S, --socket=name The socket file to use for connection. --server-public-key-path=name File path to the server public RSA key in PEM format. --get-server-public-key Get server public key --ssl-mode=name SSL connection mode. --ssl-ca=name CA file in PEM format. --ssl-capath=name CA directory. --ssl-cert=name X509 cert in PEM format. --ssl-cipher=name SSL cipher to use. --ssl-key=name X509 key in PEM format. --ssl-crl=name Certificate revocation list. --ssl-crlpath=name Certificate revocation list path. --tls-version=name TLS version to use, permitted values are: TLSv1.2, TLSv1.3 --ssl-fips-mode=name SSL FIPS mode (applies only for OpenSSL); permitted values are: OFF, ON, STRICT --tls-ciphersuites=name TLS v1.3 cipher to use. --ssl-session-data=name Session data file to use to enable ssl session reuse --ssl-session-data-continue-on-failed-reuse If set to ON, this option will allow connection to succeed even if session data cannot be reused. -t, --table Output in table format. --tee=name Append everything into outfile. See interactive help (\h) also. Does not work in batch mode. Disable with --disable-tee. This option is disabled by default. -u, --user=name User for login if not current user. -U, --safe-updates Only allow UPDATE and DELETE that uses keys. -U, --i-am-a-dummy Synonym for option --safe-updates, -U. -v, --verbose Write more. (-v -v -v gives the table output format). -V, --version Output version information and exit. -w, --wait Wait and retry if connection is down. --connect-timeout=# Number of seconds before connection timeout. --max-allowed-packet=# The maximum packet length to send to or receive from server. --net-buffer-length=# The buffer size for TCP/IP and socket communication. --select-limit=# Automatic limit for SELECT when using --safe-updates. --max-join-size=# Automatic limit for rows in a join when using --safe-updates. --show-warnings Show warnings after every statement. -j, --syslog Log filtered interactive commands to syslog. Filtering of commands depends on the patterns supplied via histignore option besides the default patterns. --plugin-dir=name Directory for client-side plugins. --default-auth=name Default authentication client-side plugin to use. --binary-mode By default, ASCII '\0' is disallowed and '\r\n' is translated to '\n'. This switch turns off both features, and also turns off parsing of all clientcommands except \C and DELIMITER, in non-interactive mode (for input piped to mysql or loaded using the 'source' command). This is necessary when processing output from mysqlbinlog that may contain blobs. --connect-expired-password Notify the server that this client is prepared to handle expired password sandbox mode. --compression-algorithms=name Use compression algorithm in server/client protocol. Valid values are any combination of 'zstd','zlib','uncompressed'. --zstd-compression-level=# Use this compression level in the client/server protocol, in case --compression-algorithms=zstd. Valid range is between 1 and 22, inclusive. Default is 3. --load-data-local-dir=name Directory path safe for LOAD DATA LOCAL INFILE to read from. --fido-register-factor=name Specifies authentication factor, for which registration needs to be done. --authentication-oci-client-config-profile=name Specifies the configuration profile whose configuration options are to be read from the OCI configuration file. Default is DEFAULT. --oci-config-file=name Specifies the location of the OCI configuration file. Default for Linux is ~/.oci/config and %HOME/.oci/config on Windows. --plugin-authentication-kerberos-client-mode=name Kerberos authentication mode. Valid values: SSPI, GSSAPI. If not specified, default is SSPI Default options are read from the following files in the given order: C:\Windows\my.ini C:\Windows\my.cnf C:\my.ini C:\my.cnf D:\web-server\mysql80\my.ini D:\web-server\mysql80\my.cnf The following groups are read: mysql client The following options may be given as the first argument: --print-defaults Print the program argument list and exit. --no-defaults Don't read default options from any option file, except for login file. --defaults-file=# Only read default options from the given file #. --defaults-extra-file=# Read this file after the global files are read. --defaults-group-suffix=# Also read groups with concat(group, suffix) --login-path=# Read this path from the login file. Variables (--variable-name=value) and boolean options {FALSE|TRUE} Value (after reading options) ------------------------------------------ ------------------------------- auto-rehash TRUE auto-vertical-output FALSE bind-address (No default value) binary-as-hex FALSE character-sets-dir (No default value) column-type-info FALSE comments FALSE compress FALSE database (No default value) default-character-set auto delimiter ; enable-cleartext-plugin FALSE vertical FALSE force FALSE histignore (No default value) named-commands FALSE ignore-spaces FALSE init-command (No default value) local-infile FALSE no-beep FALSE host (No default value) dns-srv-name (No default value) html FALSE xml FALSE line-numbers TRUE unbuffered FALSE column-names TRUE sigint-ignore FALSE port 0 prompt mysql> quick FALSE raw FALSE reconnect TRUE shared-memory-base-name (No default value) socket MySQL80 server-public-key-path (No default value) get-server-public-key FALSE ssl-ca (No default value) ssl-capath (No default value) ssl-cert (No default value) ssl-cipher (No default value) ssl-key (No default value) ssl-crl (No default value) ssl-crlpath (No default value) tls-version (No default value) tls-ciphersuites (No default value) ssl-session-data (No default value) ssl-session-data-continue-on-failed-reuse FALSE table FALSE user (No default value) safe-updates FALSE i-am-a-dummy FALSE connect-timeout 0 max-allowed-packet 16777216 net-buffer-length 16384 select-limit 1000 max-join-size 1000000 show-warnings FALSE plugin-dir (No default value) default-auth (No default value) binary-mode FALSE connect-expired-password FALSE compression-algorithms (No default value) zstd-compression-level 3 load-data-local-dir (No default value) fido-register-factor (No default value) authentication-oci-client-config-profile (No default value) oci-config-file (No default value)
> mysqladmin --help mysqladmin Ver 8.0.33 for Win64 on x86_64 (MySQL Community Server - GPL) Copyright (c) 2000, 2023, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Administration program for the mysqld daemon. Usage: mysqladmin [OPTIONS] command command.... --bind-address=name IP address to bind to. -c, --count=# Number of iterations to make. This works with -i (--sleep) only. -#, --debug[=#] This is a non-debug version. Catch this and exit. --debug-check This is a non-debug version. Catch this and exit. --debug-info This is a non-debug version. Catch this and exit. -f, --force Don't ask for confirmation on drop database; with multiple commands, continue even if an error occurs. -C, --compress Use compression in server/client protocol. --character-sets-dir=name Directory for character set files. --default-character-set=name Set the default character set. -?, --help Display this help and exit. -h, --host=name Connect to host. -b, --no-beep Turn off beep on error. -p, --password[=name] Password to use when connecting to server. If password is not given it's asked from the tty. -,, --password1[=name] Password for first factor authentication plugin. -,, --password2[=name] Password for second factor authentication plugin. -,, --password3[=name] Password for third factor authentication plugin. -W, --pipe Use named pipes to connect to server. -P, --port=# Port number to use for connection or 0 for default to, in order of preference, my.cnf, $MYSQL_TCP_PORT, /etc/services, built-in default (3306). --protocol=name The protocol to use for connection (tcp, socket, pipe, memory). -r, --relative Show difference between current and previous values when used with -i. Currently only works with extended-status. --shared-memory-base-name=name Base name of shared memory. -s, --silent Silently exit if one can't connect to server. -S, --socket=name The socket file to use for connection. -i, --sleep=# Execute commands repeatedly with a sleep between. --ssl-mode=name SSL connection mode. --ssl-ca=name CA file in PEM format. --ssl-capath=name CA directory. --ssl-cert=name X509 cert in PEM format. --ssl-cipher=name SSL cipher to use. --ssl-key=name X509 key in PEM format. --ssl-crl=name Certificate revocation list. --ssl-crlpath=name Certificate revocation list path. --tls-version=name TLS version to use, permitted values are: TLSv1.2, TLSv1.3 --ssl-fips-mode=name SSL FIPS mode (applies only for OpenSSL); permitted values are: OFF, ON, STRICT --tls-ciphersuites=name TLS v1.3 cipher to use. --ssl-session-data=name Session data file to use to enable ssl session reuse --ssl-session-data-continue-on-failed-reuse If set to ON, this option will allow connection to succeed even if session data cannot be reused. --server-public-key-path=name File path to the server public RSA key in PEM format. --get-server-public-key Get server public key -u, --user=name User for login if not current user. -v, --verbose Write more information. -V, --version Output version information and exit. -E, --vertical Print output vertically. Is similar to --relative, but prints output vertically. -w, --wait[=#] Wait and retry if connection is down. --connect-timeout=# --shutdown-timeout=# --plugin-dir=name Directory for client-side plugins. --default-auth=name Default authentication client-side plugin to use. --enable-cleartext-plugin Enable/disable the clear text authentication plugin. --show-warnings Show warnings after execution --compression-algorithms=name Use compression algorithm in server/client protocol. Valid values are any combination of 'zstd','zlib','uncompressed'. --zstd-compression-level=# Use this compression level in the client/server protocol, in case --compression-algorithms=zstd. Valid range is between 1 and 22, inclusive. Default is 3. Variables (--variable-name=value) and boolean options {FALSE|TRUE} Value (after reading options) ----------------------------------------- -------------------------------- bind-address (No default value) count 0 force FALSE compress FALSE character-sets-dir (No default value) default-character-set auto host (No default value) no-beep FALSE port 0 relative FALSE shared-memory-base-name (No default value) socket MySQL80 sleep 0 ssl-ca (No default value) ssl-capath (No default value) ssl-cert (No default value) ssl-cipher (No default value) ssl-key (No default value) ssl-crl (No default value) ssl-crlpath (No default value) tls-version (No default value) tls-ciphersuites (No default value) ssl-session-data (No default value) ssl-session-data-continue-on-failed-reuse FALSE server-public-key-path (No default value) get-server-public-key FALSE user (No default value) verbose FALSE vertical FALSE connect-timeout 43200 shutdown-timeout 3600 plugin-dir (No default value) default-auth (No default value) enable-cleartext-plugin FALSE show-warnings FALSE compression-algorithms (No default value) zstd-compression-level 3 Default options are read from the following files in the given order: C:\Windows\my.ini C:\Windows\my.cnf C:\my.ini C:\my.cnf D:\web-server\mysql80\my.ini D:\web-server\mysql80\my.cnf The following groups are read: mysqladmin client The following options may be given as the first argument: --print-defaults Print the program argument list and exit. --no-defaults Don't read default options from any option file, except for login file. --defaults-file=# Only read default options from the given file #. --defaults-extra-file=# Read this file after the global files are read. --defaults-group-suffix=# Also read groups with concat(group, suffix) --login-path=# Read this path from the login file. Where command is a one or more of: (Commands may be shortened) create databasename Create a new database debug Instruct server to write debug information to log drop databasename Delete a database and all its tables extended-status Gives an extended status message from the server flush-hosts Flush all cached hosts flush-logs Flush all logs flush-status Clear status variables flush-tables Flush all tables flush-threads Flush the thread cache flush-privileges Reload grant tables (same as reload) kill id,id,... Kill mysql threads password [new-password] Change old password to new-password in current format ping Check if mysqld is alive processlist Show list of active threads in server reload Reload grant tables refresh Flush all tables and close and open logfiles shutdown Take server down status Gives a short status message from the server start-replica Start replication start-slave Deprecated: use start-replica instead stop-replica Stop replication stop-slave Deprecated: use stop-replica instead variables Prints variables available version Get version info from server
Дополнительно
Поиск: MySQL • Web-разработка • Windows • Клиент • Настройка • Сервер • Установка