introdução
A seção anterior introduziu o processo de execução do mysqld_safe.Esta seção rastreia o processo de configuração de entrada e carregamento do mysqld de acordo com o comando de inicialização gerado pelo mysqld_safe.
analisar
Entrada
A função principal de sql/main.cc chama a função mysqld_main de sql/mysqld.cc.
Aqui iniciamos o mysqld da seguinte forma:
/usr/local/mysql/bin/mysqld \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data \
--plugin-dir=/usr/local/mysql/lib/plugin \
--user=mysql
carregar configuração
load_defaults(MYSQL_CONFIG_NAME, load_default_groups, &argc, &argv)
O valor de MYSQL_CONFIG_NAME é "my", argc é o número de parâmetros e argv é o valor do parâmetro. Neste ponto argv é {"/usr/local/mysql/bin/mysqld", "--basedir=/usr/local/mysql", "--datadir=/usr/local/mysql/data", "-- plugin-dir= /usr/local/mysql/lib/plugin", "--user=mysql"}
- Inicializar diretório de configuração
dirs= init_default_directories(&alloc)
Os diretórios inicializados são "/etc/", "/etc/mysql/", "/usr/local/mysql/etc/", "~/".
- ler arquivo de configuração
my_search_option_files(conf_file, argc, argv,&args_used, handle_default_option, (void *) &ctx, dirs, false, found_no_defaults)
Leia os arquivos de configuração em um diretório. Escolhemos o diretório "~/" para depuração e criamos um novo arquivo oculto .my.cnf no diretório. Se você optar por inicializar outro diretório no diretório, o nome do arquivo será my.cnf. Insira algum conteúdo em .my.cnf, como segue:
[mysqld]
max-connections = 300
port = 3306
Neste momento, o valor apontado por ctx.m_args.m_array_ptr é {"–max-connections=300", “–port=3306”}
- Parâmetros de configuração adicionais
memcpy((res+1), &my_args[0], my_args.size() * sizeof(char*));
set_args_separator(&res[my_args.size() + 1]);
memcpy((uchar*) (res + 1 + my_args.size() + args_sep), (char*) ((*argv)+1), (*argc-1)*sizeof(char*));
O valor de my_args é copiado para res, e o separador e o valor de argv são anexados.O efeito é que os parâmetros lidos no arquivo de configuração são adicionados na frente dos parâmetros de inicialização. O argv final é {"/usr/local/mysql/bin/mysqld", "–max-connections=300", "–port=3306", "----args-separator----", "– basedir =/usr/local/mysql", "–datadir=/usr/local/mysql/data", "–plugin-dir=/usr/local/mysql/lib/plugin", "–user=mysql"}
Resumir
Ao visualizar o código-fonte, comece com a função main e siga o passo a passo da depuração. O processo de configuração de carregamento atual precisa compreender o processo de alteração de argv.
Palavras-chave
Entrada; Inicializar diretório de configuração; Ler arquivo de configuração; Adicionar parâmetros de configuração