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_tables
e 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
ISAM
antigos para arquivosMyISAM
com 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_name
Note que ele deve ser usado apenas se você usar se todas as tabelas em um dado banco de dados são
ISAM
ouMyISAM
. Para evitar a conversão de tabelas de outros tipos paraMyISAM
, você pode listar explicitamente o nome de suas tabelasISAM
depois do nome do banco de dados na linha de comando. Você também pode executar uma instruçãoALTER TABLE table_name TYPE=MyISAM
para cada tabelaISAM
para 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.so
foram 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 deGRANT
eREVOKE
".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 TABLES
eLOCK TABLES
. Os privilégiosSUPER
eEXECUTE
tiram o seu valor dePROCESS
.REPLICATION SLAVE
eREPLICATION CLIENT
tiram 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
GRANT
nos scripts, este é um bom momento para alterar os seus scripts e usarGRANT
em vez de modificar a tabela de permissões diretamente.A partir da versão 4.0.2 a opção
--safe-show-database
está obsoleta (e não faz mais nada). Leia "Opções de Inicialização para omysqld
em Relação a Segurança.".Se você receber um erro
Access denied
para 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_mysqld
como 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
configure
com a opção--without-innodb
. - O parâmetro de inicialização
myisam_max_extra_sort_file_size
emyisam_max_extra_sort_file_size
sã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_size
bulk_insert_buffer_size
query_cache_startup_type
query_cache_type
record_buffer
read_buffer_size
record_rnd_buffer
read_rnd_buffer_size
sort_buffer
sort_buffer_size
warnings
log-warnings
--err-log
--log-error
(paramysqld_safe
)As opções de inicialização
record_buffer
,sort_buffer
ewarnings
ainda funcionarão no MariaDB mas estãp obsoletas. - As seguintes veriáveis SQL mudaram o nome.
Nome Antigo Novo Nome. SQL_BIG_TABLES
BIG_TABLES
SQL_LOW_PRIORITY_UPDATES
LOW_PRIORITY_UPDATES
SQL_MAX_JOIN_SIZE
MAX_JOIN_SIZE
SQL_QUERY_CACHE_TYPE
QUERY_CACHE_TYPE
Os 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-locking
e--enable-locking
foram renomeadas para--skip-external-locking
e--external-locking
. SHOW MASTER STATUS
agora retorna um conjunto vazio se o log binário não estiver habilitado.SHOW SLAVE STATUS
agora retorna um conjunto vazio se o slave não está inicializado.- O
mysqld
agora tem a opção--temp-pool
habilitada por padrão já que isto da melhor rendimento com alguns SO (Principalmente no Linux). - Colunas
DOUBLE
eFLOAT
agora respeitam o parâmetroUNSIGNED
no armazenamento (antes,UNSIGNED
era ignortado por estas colunas). ORDER BY coluna DESC
ordena valoresNULL
por ú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 INDEX
tem duas colunas a mais (Null
eIndex_type
) que ele tinha nas versões 3.23.CHECK
,SIGNED
,LOCALTIME
eLOCALTIMESTAMP
sã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_SUBTRACTION
ao 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 nastring
convertidos 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 ... SELECT
sempre tem oIGNORE
habilitado. Na versão 4.0.1, o MariaDB irá parar (e possívelmente fazer um roll back) por padrão no caso demysqld_safe
ser renomeado paramysqld_safe
. Por algum tempo incluiremos em nossa distribuição binária omysqld_safe
como 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
,length
emax_length
foram alterados deunsigned int
paraunsigned 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 TABLE
quando quiser deletar todos os registros de uma tabela e você não precisa obter uma contagen de quantas colunas forma deletadas. (DELETE FROM table_name
retorna a contagem de linhas na versão 4.0, eTRUNCATE TABLE
é mais rápido.) - Você receberá um erro se tiver um
LOCK TABLES
ativo ou transações ao tentar executarTRUNCATE TABLE
ouDROP 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 TABLE
alterou. - 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-mysql
versã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 deA
eB
. (A ordem geral-para-específco é string,REAL
ouINTEGER
).
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".