Atualizando da Versão 3.23 para 4.0
Em geral, o que você deve fazer é atualizar para a versão 4.0 um versão mais nova do MariaDB:
- Após o upgrade, atualize a tabela de permissões para adicionar novos privilégios e recursos. O procedimento usa o script
mysql_fix_privilege_tablese está descrito em "Atualizando a Tabela de Permissões". - Edite qualquer script de inicialização ou arquivo de configuração para não utilizar nenhuma das opções obsoletas listadas posteriormente nesta seção.
- Converta seua arquivos
ISAMantigos para arquivosMyISAMcom o comando:mysql_convert_table_format database. (Este é um script Perl; ele exige que o DBI esteja instalado). Paa converter a tabela em um dado banco de dados, use este comando:shell>
mysql_convert_table_format database db_nameNote que ele deve ser usado apenas se você usar se todas as tabelas em um dado banco de dados são
ISAMouMyISAM. Para evitar a conversão de tabelas de outros tipos paraMyISAM, você pode listar explicitamente o nome de suas tabelasISAMdepois do nome do banco de dados na linha de comando. Você também pode executar uma instruçãoALTER TABLE table_name TYPE=MyISAMpara cada tabelaISAMpara convertê-la paraMyISAM.Para descobir o tipo de uma determinada tabela, use esta instrução:
mysql>
SHOW TABLE STATUS LIKE 'tbl_name'; - Certifique-se de que você não tem nenhum cliente MariaDB que utiliza bibliotecas compartilhadas (com o Perl
DBD-mysql). Se você tiver, você deve recompilá-las já que as estruturas usadas emlibmysqlclient.soforam alteradas. O mesmo se aplica a outras interfaces MySQL, como PythonMySQLdb.
O MariaDB funcionará mesmo se você não fizer o acima, mas você não poderá usar os novos privilégios de segurança pois o MariaDB e você podem encontrar problemas ao atualizar o MariaDB para a versão 4.1 ou mais nova. O formato do arquivo ISAM ainda funciona no MariaDB mas está obsoleto e será disabilitado (não compilado por padrão) no MariaDB 4.1. Em vez disso deve se usar tabelas MyISAM.
Clientes antigos devem funcionar com um servidor versão 4.0 sem nenhum problema.
Mesmo se você fizer o indicado acima, você ainda pode voltar para o MariaDB 3.23.52 ou mais novo se você encontrar problemas com o MariaDB da série 4.0. Neste caso você deve usar o mysqldump para fazer um dump de qualquer tabela que use um índice full-text e recarregar o arquivo de dump no servidor 3.23 (pois o 4.0 usa um novo formato para índices full-text).
A seguir está uma lista mais completa com o que deve ser observado para atualizar para a versão 4.0;
- O MariaDB tem vários novos privilégios na tabela
mysql.user. Leia "A Sintaxe deGRANTeREVOKE".Para fazer estes novos privilégios funcionarem, deve se atualizar a tabela de permissões. O procedimento está descrito em "Atualizando a Tabela de Permissões". Até que este script esteja executando todos os usuários têm os privilégios
SHOW DATABASES,CREATE TEMPORARY TABLESeLOCK TABLES. Os privilégiosSUPEReEXECUTEtiram o seu valor dePROCESS.REPLICATION SLAVEeREPLICATION CLIENTtiram o seu valor deFILE.Se você tiver qualquer script que crie novos usuários, você pode querer alterá-los para usar os novos privilégios. Se você não está usando o comando
GRANTnos scripts, este é um bom momento para alterar os seus scripts e usarGRANTem vez de modificar a tabela de permissões diretamente.A partir da versão 4.0.2 a opção
--safe-show-databaseestá obsoleta (e não faz mais nada). Leia "Opções de Inicialização para omysqldem Relação a Segurança.".Se você receber um erro
Access deniedpara novos usuários na versão 4.0.2, você deve verificar se você precisa de alguma das novas concessões que você não precisava antes. Em particular, você precisaráREPLICATION SLAVE(em vez deFILE) para novos slaves. safe_mysqldé renomeado paramysqld_safe. Para compatibilidade com versões anteriores, as distribuições binárias, irão, por algum tempo, incluirsafe_mysqldcomo um link simbólico paramysqld_safe.- Suporte para InnoDB agora está incluído na distribuição binária. Se você contruir o MariaDB a partir de um fonte, o InnoDB está configurado por padrão, Se você não usar o InnoDB e quiser economizar memória ao executar o servidor que possui suorte a InnoDB habilitado, use a opção de inicialização do servidor. Para compilar o MariaDB sem suporte ao InnoDB, execute
configurecom a opção--without-innodb. - O parâmetro de inicialização
myisam_max_extra_sort_file_sizeemyisam_max_extra_sort_file_sizesão dados agora em bytes. (eram dados em megabytes antes da versão 4.0.3).O lock de sistema externo dos arquivos MyISAM/ISAM agora está desligado por padrão. Pode se ligá-los fazendo
--external-locking. (Para a maioria dos usuários isto nunca é necessário). - A seguintes variáveis/opções de inicializaçao foram renomeadas:
Nome Antigo Novo Nome. myisam_bulk_insert_tree_sizebulk_insert_buffer_sizequery_cache_startup_typequery_cache_typerecord_bufferread_buffer_sizerecord_rnd_bufferread_rnd_buffer_sizesort_buffersort_buffer_sizewarningslog-warnings--err-log--log-error(paramysqld_safe)As opções de inicialização
record_buffer,sort_bufferewarningsainda funcionarão no MariaDB mas estãp obsoletas. - As seguintes veriáveis SQL mudaram o nome.
Nome Antigo Novo Nome. SQL_BIG_TABLESBIG_TABLESSQL_LOW_PRIORITY_UPDATESLOW_PRIORITY_UPDATESSQL_MAX_JOIN_SIZEMAX_JOIN_SIZESQL_QUERY_CACHE_TYPEQUERY_CACHE_TYPEOs nomes antigos ainda funcionam no MariaDB mas estão obsoletos.
- Você deve usar
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=#em vez deSET SQL_SLAVE_SKIP_COUNTER=#. - As opções de inicialização
--skip-lockinge--enable-lockingforam renomeadas para--skip-external-lockinge--external-locking. SHOW MASTER STATUSagora retorna um conjunto vazio se o log binário não estiver habilitado.SHOW SLAVE STATUSagora retorna um conjunto vazio se o slave não está inicializado.- O
mysqldagora tem a opção--temp-poolhabilitada por padrão já que isto da melhor rendimento com alguns SO (Principalmente no Linux). - Colunas
DOUBLEeFLOATagora respeitam o parâmetroUNSIGNEDno armazenamento (antes,UNSIGNEDera ignortado por estas colunas). ORDER BY coluna DESCordena valoresNULLpor último, como no MariaDB 4.0.11. Na versão 3.23 e anteriores da versão 4.0, isto nem sempre era consistente.SHOW INDEXtem duas colunas a mais (NulleIndex_type) que ele tinha nas versões 3.23.CHECK,SIGNED,LOCALTIMEeLOCALTIMESTAMPsão agora palavras reservadas.- O resultado de todos os operadores bitwise (
|,&,<<,>>e~) agora são unsigned. Isto pode causar problemas se você estiver usando-as em um contexto onde você quer um resultado com sinal. Leia "Funções de Conversão". - Nota: quando você usa subtração entre valores inteiros onde um deles é do tipo
UNSIGNED, o resultado será sem sinal. Em oyras palavras, antes de atualizar para o MariaDB 4.0, você deve verificar sua aplicação para os casos onde você está subtraindo um valor de uma entidade sem sinal e quer um número negativo como resposta ou subtraindo um valor sem sinal de uma coluna do tipo inteiro. Você pode disabilitar este comportamento usando a opção--sql-mode=NO_UNSIGNED_SUBTRACTIONao iniciar omysqld. Leia "Funções de Conversão". - Para usar
MATCH ... AGAINST (... IN BOOLEAN MODE)com suas tabelas, você precisa recontruí-las comREPAIR TABLE nome_tabela USE_FRM. LOCATE()eINSTR()são caso sensitivo se um dos argumentos é uma string binária. De outra forma elas são caso-insensitivo.STRCMP()agora usa o conjunto de caracteres atual ao fazer comparações, o que significa que o comportamento padrão das comparações agora é caso-insensitivo.HEX(string)agora retorna os caracteres nastringconvertidos para hexadecimal. Se você quiser converter um número para hexadecimal, você deve se assugurar que você chamaHEX()com um argumento numérico.- Na versão 3.23,
INSERT INTO ... SELECTsempre tem oIGNOREhabilitado. Na versão 4.0.1, o MariaDB irá parar (e possívelmente fazer um roll back) por padrão no caso demysqld_safeser renomeado paramysqld_safe. Por algum tempo incluiremos em nossa distribuição binária omysqld_safecomo um link simbólico paramysqld_safe. - um erro se você não especificar
IGNORE. - As funções antigas da API C
mysql_drop_db(),mysql_create_db()emysql_connect()não sã mais suportadas a menos que você compile o MariaDB comCFLAGS=-DUSE_OLD_FUNCTIONS. No entanto, é preferível alterar o cliente para utilizar a nova API 4.0. - Na estrutura
MYSQL_FIELD,lengthemax_lengthforam alterados deunsigned intparaunsigned long. Isto não deve causar problemas, exceto que eles podem gerar mensagens de avisos quando quando usado como argumento em uma classeprintf()de funções. - Você deve usar
TRUNCATE TABLEquando quiser deletar todos os registros de uma tabela e você não precisa obter uma contagen de quantas colunas forma deletadas. (DELETE FROM table_nameretorna a contagem de linhas na versão 4.0, eTRUNCATE TABLEé mais rápido.) - Você receberá um erro se tiver um
LOCK TABLESativo ou transações ao tentar executarTRUNCATE TABLEouDROP DATABASE. - Você deve usar inteiros para armazenar valores em colunas
BIGINT(em vez de usar strings, como você fez no MariaDB 3.23). Usar strings ainda funicona, mas usar inteiros é mais eficiente. - O formato de
SHOW OPEN TABLEalterou. - Clientes multi-thread devem usar
mysql_thread_init()emysql_thread_end(). Leia "Como Fazer um Cliente em Threads". - Se você quiser recompilar o módulo Perl
DBD::mysql, você deve conseguir oDBD-mysqlversão 1.2218 ou mais novo porque os módulos DBD mais antigos usam a chamada obsoletamysql_drop_db(). A versão 2.1022 ou mais nova é recomendada. - Na versão
RAND(seed)retorna uma série de número randômicas diferente que na 3.23; isto foi feito para uma diferenciação maior deRAND(seed)eRAND(seed+1). - O tipo padrão retornado por
IFNULL(A,B)agora está configurado para ser o mais 'geral' dos tipos deAeB. (A ordem geral-para-específco é string,REALouINTEGER).
Se você estiver executando o MariaDB Server no Windows, veja "Atualizando o MariaDB no Windows". Se você estiver usando replicação, veja "Visão Geral da Implementação da Replicação".