Em geral, o que você deve fazer é atualizar para a versão 4.0 um versão mais nova do MySQL:
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 Secção 2.5.6, “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
arquivos MyISAM
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
ou MyISAM
. Para
evitar a conversão de tabelas de outros tipos para
MyISAM
, você pode listar explicitamente
o nome de suas tabelas ISAM
depois do
nome do banco de dados na linha de comando. Você também
pode executar uma instrução ALTER TABLE
table_name TYPE=MyISAM
para cada tabela
ISAM
para convertê-la para
MyISAM
.
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 MySQL que
utiliza bibliotecas compartilhadas (com o Perl
DBD-mysql
). Se você tiver, você deve
recompilá-las já que as estruturas usadas em
libmysqlclient.so
foram alteradas. O
mesmo se aplica a outras interfaces MySQL, como Python
MySQLdb
.
O MySQL 4.0 funcionará mesmo se você não fizer o acima, mas
você não poderá usar os novos privilégios de segurança pois
o MySQL 4.0 e você podem encontrar problemas ao atualizar o
MySQL para a versão 4.1 ou mais nova. O formato do arquivo
ISAM
ainda funciona no MySQL 4.0 mas está
obsoleto e será disabilitado (não compilado por padrão) no
MySQL 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 MySQL 3.23.52 ou mais novo se você encontrar problemas
com o MySQL 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 MySQL 4.0 tem vários novos privilégios na tabela
mysql.user
. See Secção 4.4.1, “A Sintaxe de GRANT
e REVOKE
”.
Para fazer estes novos privilégios funcionarem, deve se
atualizar a tabela de permissões. O procedimento está
descrito em Secção 2.5.6, “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
e LOCK
TABLES
. Os privilégios SUPER
e
EXECUTE
tiram o seu valor de
PROCESS
. REPLICATION
SLAVE
e REPLICATION CLIENT
tiram o seu valor de FILE
.
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 usar GRANT
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). See Secção 4.3.3, “Opções de Inicialização para o mysqld
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 de
FILE
) para novos slaves.
safe_mysqld
é renomeado para
mysqld_safe
. Para compatibilidade com
versões anteriores, as distribuições binárias, irão,
por algum tempo, incluir safe_mysqld
como
um link simbólico para mysqld_safe
.
Suporte para InnoDB agora está incluído na distribuição
binária. Se você contruir o MySQL 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 MySQL sem
suporte ao InnoDB, execute configure
com
a opção --without-innodb
.
O parâmetro de inicialização
myisam_max_extra_sort_file_size
e
myisam_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 (para mysqld_safe ) |
As opções de inicialização
record_buffer
,
sort_buffer
e warnings
ainda funcionarão no MySQL 4.0 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 MySQL 4.0 mas estão obsoletos.
Você deve usar SET GLOBAL
SQL_SLAVE_SKIP_COUNTER=#
em vez de SET
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
e FLOAT
agora respeitam o parâmetro UNSIGNED
no
armazenamento (antes, UNSIGNED
era
ignortado por estas colunas).
ORDER BY coluna DESC
ordena valores
NULL
por último, como no MySQL 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
e Index_type
)
que ele tinha nas versões 3.23.
CHECK
, SIGNED
,
LOCALTIME
e
LOCALTIMESTAMP
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. See
Secção 6.3.5, “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 MySQL 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 o mysqld
. See
Secção 6.3.5, “Funções de Conversão”.
Para usar MATCH ... AGAINST (... IN BOOLEAN
MODE)
com suas tabelas, você precisa
recontruí-las com REPAIR TABLE nome_tabela
USE_FRM
.
LOCATE()
e INSTR()
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
na string
convertidos para hexadecimal.
Se você quiser converter um número para hexadecimal, você
deve se assugurar que você chama HEX()
com um argumento numérico.
Na versão 3.23, INSERT INTO ... SELECT
sempre tem o IGNORE
habilitado. Na
versão 4.0.1, o MySQL irá parar (e possívelmente fazer um
roll back) por padrão no caso de
mysqld_safe
ser renomeado para
mysqld_safe
. Por algum tempo
incluiremos em nossa distribuição binária o
mysqld_safe
como um link simbólico para
mysqld_safe
.
um erro se você não especificar IGNORE
.
As funções antigas da API C
mysql_drop_db()
,
mysql_create_db()
e
mysql_connect()
não sã mais suportadas
a menos que você compile o MySQL com
CFLAGS=-DUSE_OLD_FUNCTIONS
. No entanto,
é preferível alterar o cliente para utilizar a nova API
4.0.
Na estrutura MYSQL_FIELD
,
length
e max_length
foram alterados de unsigned int
para
unsigned long
. Isto não deve causar
problemas, exceto que eles podem gerar mensagens de avisos
quando quando usado como argumento em uma classe
printf()
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, e
TRUNCATE TABLE
é mais rápido.)
Você receberá um erro se tiver um LOCK
TABLES
ativo ou transações ao tentar executar
TRUNCATE TABLE
ou DROP
DATABASE
.
Você deve usar inteiros para armazenar valores em colunas
BIGINT
(em vez de usar strings, como
você fez no MySQL 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()
e
mysql_thread_end()
. See
Secção 12.1.14, “Como Fazer um Cliente em Threads”.
Se você quiser recompilar o módulo Perl
DBD::mysql
, você deve conseguir o
DBD-mysql
versão 1.2218 ou mais novo
porque os módulos DBD mais antigos usam a chamada obsoleta
mysql_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 de
RAND(seed)
e
RAND(seed+1)
.
O tipo padrão retornado por IFNULL(A,B)
agora está configurado para ser o mais 'geral' dos tipos de
A
e B
. (A ordem
geral-para-específco é string, REAL
ou
INTEGER
).
Se você estiver executando o MySQL Server no Windows, veja Secção 2.5.8, “Atualizando o MySQL no Windows”. Se você estiver usando replicação, veja Secção 4.11.2, “Visão Geral da Implementação da Replicação”.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.