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.)

Synetech
fonte

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 dont 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_"
Synetech
fonte
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 !!!

RolandoMySQLDBA
fonte
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
Imifos
fonte
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.

Alec Gorge
fonte
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