Instalando tabelas MySQL padrão no Windows (mysql_install_db)


12

No Linux, as tabelas de concessão padrão do MySQL podem ser criadas com o mysql_install_dbscript, mas isso não funciona no Windows.

Como as tabelas de concessão padrão podem ser instaladas no Windows?

(Não, não estou procurando a resposta de que os resultados do Google estão repletos de como eles são instalados automaticamente no Windows, porque esse é apenas o caso da distribuição do instalador, não do pacote ZIP. Além disso, isso não ajuda depois O MySQL está instalado e o diretório de dados está danificado ou está sendo substituído ou algo parecido.)

Respostas:


13

Eu sabia que já havia enfrentado isso antes e consegui descobrir, então procurei nas minhas unidades e encontrei um arquivo em lotes que havia escrito na última vez.

Para qualquer pessoa que tenha esse problema, o que você precisa fazer é executar o daemon do servidor com os --bootstrapparâmetros.

Aqui está o script que eu usei para despejar todos os bancos de dados em um arquivo SQL e importá-los novamente (ou seja, manualmente - e inconvenientemente - implementar uma contraparte do MySQL no vacuumcomando do SQLite ).

::Start the server, change to the MySQL bin directory, and dump all databases
net start MySQL
cd       /d "%serverdir%\MySQL\bin"
mysqldump  -uroot -p --all-tablespaces --all-databases --add-drop-database --add-drop-table --add-locks --comments --complete-insert --compress --create-options --events --routines --quick --quote-names --set-charset --triggers > %temp%\all.sql

::Stop the server and rename the data directory (as backup)
net stop mysql
ren         "%datadir%\MySQL"        MySQL_

::Delete data folder in MySQL directory, optionally copy old mysql tables
rd    /s /q "%serverdir%\MySQL\data"
md          "%serverdir%\MySQL\data"
xcopy /s /e "%datadir%\MySQL_\mysql" "%serverdir%\MySQL\data"

::Bootstrap the server (creates grant tables if they don’t exist)
mysqld --bootstrap

::Run server, optionally upgrade tables and move upgrade log to data directory
start mysqld --skip-grant-tables
mysql_upgrade --force
move "%serverdir%\MySQL\bin\mysql_upgrade_info" "%serverdir%\MySQL\data"

::Import all databases, shutdown, delete logs, then move to old data dir
mysql      -uroot -p < %temp%\all.sql
mysqladmin -uroot -p shutdown
md  "%datadir%\MySQL"
del "%serverdir%\MySQL\data\ib_logfile?"
xcopy /s /e "%serverdir%\MySQL\data\*" "%datadir%\MySQL"
rd    /s /q "%serverdir%\MySQL\data"

::Start the server, if it works, then all should be well, so del
net start mysql
rd    /s /q "%datadir%\MySQL_"

5

Se você teve esse dilema estranho nas tabelas de concessão do MySQL para Windows, recomendo o seguinte:

Etapa 1. Obtenha a distribuição ZIP FIle que não possui o instalador.

Etapa 2. Descompacte o conteúdo para C:\MySQLZipStuff

Etapa 3. Procure a pasta C:\MySQLZipStuff\data\mysql

Etapa 4. Copie todos os arquivos C:\MySQLZipStuff\data\mysqlpara a pasta mysql do diretório de dados desejado.

Etapa 5. net start mysql

Se você já possui a pasta mysql, pode fazer isso:

Etapa 1. Edite my.iniadicionando esta linha na seção [mysqld]

[mysqld]
skip-grant-tables
skip-networking

Passo 2. net stop mysql

Etapa 3. net start mysql

Neste ponto, você pode apenas digitar 'mysql' e entrar. No entanto, você não pode executar comandos GRANT com as tabelas de concessão desabilitadas.

Etapa 4. Você precisará inserir um superusuário manualmente. Como isso

a) INSERT INTO mysql.user SET user='root',host='localhost';

b) SELECT * FROM mysql.user WHERE user='root' AND host='localhost'\G

Isso mostrará todas as colunas na tabela do usuário. Você precisará alterar manualmente cada coluna como esta:

UPDATE mysql.user SET select_priv = 'Y', insert_priv = 'Y', ... WHERE usuário = 'root' AND host = 'localhost';

c) Configure uma senha para root @ localhost como esta:

UPDATE mysql.user SET password=PASSWORD('whateverpasswordyouwant')
WHERE user='root' AND host='localhost';

Passo 5. Retire skip-grant-tablese skip-networkingdemy.ini

Etapa 6. net stop mysql

Etapa 7. net start mysql

Agora você pode logar no mysql como root usando 'qualquer senha que você queira' como a senha.

De uma chance !!!


Obrigado pelas dicas; são muitas etapas, considerando que no Linux é necessário apenas um único script. :-(
— Synetech

3

PARA SUA INFORMAÇÃO,

é --initializeagora, em vez do obsoleto--bootstrap


NB por uma questão de completude:

Para executar isso usando uma conta sem privilégios:

mysqld.exe --log_syslog=0 --console --standalone --initialize

Em seguida, inicie o servidor:

mysqld.exe   --log_syslog=0 --console --standalone

2

Para quem usa o XAMPP e enfrenta esse problema, o XAMPP é enviado com um backup dessas tabelas mysql padrão.

Copie tudo nesta pasta C:\xampp\mysql\backup\mysqle cole-o C:\xampp\mysql\data\mysql, substituindo tudo.

Esteja avisado: os dados podem ser perdidos - eu não saberia, eu tinha uma instalação limpa.


Isso é útil para o XAMPP, mas é um cenário de casos de uso bastante limitado, já que o MySQL é muito mais genérico do que apenas um servidor da Web.
— Synetech

Oh eu sei. Eu só queria postar isso lá para quem chegou nesta página após pesquisar no Google por esse erro e também usa o XAMPP (como eu). Não espero que isso seja marcado como aceito, mas que seja deixado como referência para outros.
— Alec Gorge

OK fixe. Eu não sabia que ter que redefinir manualmente o XAMPP era um problema comum.
— Synetech 12/08/11

Não é, eu não tenho idéia de como isso aconteceu e eu não queria voltar a executar o instalador por medo de sobrescrever arquivos de configuração cuidadosamente tratados: P
— Alec Gorge

Oh eu sei! Como o MySQL não possui um método interno para reduzir o arquivo de banco de dados (como o vacuumcomando SQLite3, et al.), Eu tenho que despejá-lo manualmente e criar um novo de vez em quando, pois não tenho muito espaço; mas estou sempre preocupado em fazê-lo, então adiei o máximo possível.
— Synetech 12/08/11
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.