XOOPS Brasil

 

A.3. Assuntos Relacionados a Instalação

A.3.1. Problemas de Ligação com a Biblioteca do Cliente MySQL

Se você estiver ligando o seu programa e obter o erro de símbolos sem referência que iniciam com mysql_, como os seguintes:

/tmp/ccFKsdPa.o: In function `main':
/tmp/ccFKsdPa.o(.text+0xb): undefined reference to `mysql_init'
/tmp/ccFKsdPa.o(.text+0x31): undefined reference to `mysql_real_connect'
/tmp/ccFKsdPa.o(.text+0x57): undefined reference to `mysql_real_connect'
/tmp/ccFKsdPa.o(.text+0x69): undefined reference to `mysql_error'
/tmp/ccFKsdPa.o(.text+0x9a): undefined reference to `mysql_close'

você deve estar apto a resolvê-los adicionando -Lpath-to-the-mysql-library -lmysqlclient no final da sua linha de ligação.

Se você obter erros de undefined reference (referência indefinida) para as funções descompactadas ou compactadas, adicione -lz no final sa sua linha de ligação e tente novamente!

Se você obter erros de undefined reference (referência indefinida) para funções que devem existir em seu sistema, como connect, verifique a página do man sobre a função em questão para saber quais bibiotecas você deve adicionar a sua linha de ligação!

Se você obter erros de undefined reference (referência indefinida) para funções que não existem em seu sistema, como o seguinte

mf_format.o(.text+0x201): undefined reference to `__lxstat'

normalmente significa que sua biblioteca é compilada em um sistema que não é 100% compatível com o seu. Neste caso você de fazer o download da última distribuição fonte do MySQL e compilá-la você mesmo. Veja mais informações sobre isto na Seção 2.3, “Instalando uma distribuição com fontes do MySQL”.

Se você estiver tentando executar um programa e então obter erros de símbolos sem referência que começam com mysql_ ou que a biblioteca do mysqlclient não pode encontrar, significa que seu sistema não pode encontrar a biblioteca compartilhada libmysqlclient.so.

A correção deste problema é dizer ao seu sistema para buscar onde a biblioteca esta lacolizada usando um dos seguintes métodos:

  • Adicione o caminho ao diretório onde está o libmysqlclient.so à variável de ambiente LD_LIBRARY_PATH.

  • Adicione o caminho ao diretório onde está o libmysqlclient.so à variável de ambiente LD_LIBRARY.

  • Copie libmysqlclient.so a algum local que é pesquisado pelo seu sistema, como /lib, e atualize a informação da biblioteca compartilhada executando ldconfig.

OUtro modo de resolver este problema é ligar o seu programa estaticamente, com -static, ou removendo as bibliotecas dinâmicas do MySQL antes de ligar o seu código. Na próxima vez você deve estar certo que nenhum outro programa esta usando bibliotecas dinâmicas!

A.3.2. Como Executar o MySQL Como Um Utilizador Normal

O servidor mysqld pode ser iniciado por qualquer utilizador. Para fazer com que o mysqld execute como um utilizador nome_utilizador do Unix, você deve fazer o seguinte:

  1. Pare o servidor se ele estiver em execução (use mysqladmin shutdown).

  2. Altere o diretório de banco de dados e arquivos para que nome_utilizador tenha privilégios de leitura e escrita do arquivo (você pode precisar estar como o utilizador root do Unix):

    shell> chown -R nome_usuario /caminho/para/dir_dados/mysql
    

    Se o diretório ou arquivos dentro do diretório de dados do MySQL são links simbolicos, você também precisará seguir estes links e alterar os diretórios e arquivos para os quais ele aponta. chown -R pode não seguir o link simbólico para você.

  3. Inicie o servidor como o utilizador nome_utilizador, ou, se você está usando o MySQL Versão 3.22 ou mais antiga, inicie o mysqld como o utilizador root do Unix e use a opção --user=nome_usuario. mysqld trocará para executar como o utilizador nome_utilizador do Unix antes de aceitar qualquer conexão.

  4. Para iniciar o servidor automaticamente com o nome de utilizador dado na inicialização do sistema, adicione um linha user que especifica o nome do utilizador ao grupo [mysqld] do arquivo de opções /etc/my.cnf ou o arquivo de opções my.cnf no diretório de dados do servidor. Por exemplo:

    [mysqld]
    user=nome_usuario
    

Neste ponto, seu processo mysqld deve estar executando bem e redondo como utilizador nome_usuario do Unix. No entanto algo não altera: o conteúdo da tabela de permissões. Por padrão (logo depois de executar o script de instalação das tabelas de permissões mysql_install_db), o utilizador MySQL root é o único com permissão para acessar o banco de dados mysql ou para criar ou apagar banco de dados. A menos que você tenha alterado estas permissões, elas ainda valem. Isto não deve impedí-lo de de acessar o MySQL como utilizador root do MySQL quando você está logado como outro utilizador Unix deiferente de root; apenas especifique a opção -u root ao programa cliente.

Note que acessar o MySQL como root, fornecendo -u root na linha de comando é diferente de de executar o MySQL como o utilizador root do Unix,or como outro Utilizador Unix. A permissão de acesso e nome de utilizadores do MySQL estão completamente separados dos nomes de utilizador do Unix. A única conexão com os nomes de utilizador do Unix é que se você não utilizar a opção -u quando chamr o seu programa cliene, o cliente tentará conectar usando seu nome de login do Unix como o seu nome de utilizador do MySQL

Se a sua conta Unix não esta segura, você deve pelo menos colocar uma senha no utilizador root do MySQL na tabela de acesso. Senão qualquer utilizador com uma conta nesta máquina poderá executar mysql -u root nome_bd e fazer o que quiser.

A.3.3. Problemas com Permissões de Arquivos

Se você tiver problemas com permissões de arquivo, por exemplo, se o mysql enviar a seguinte mensagem de erro quando você criar uma tabela:

ERROR: Can't find file: 'path/with/filename.frm' (Errcode: 13)

então a variável de ambiente UMASK pode estar configurada incorretamente quando o mysqld inicia. O valor umask padrão é 0660. Você pode alterar este comportamento iniciando o mysqld_safe como a seguir:

shell> UMASK=384 # = 600 em octal
shell> export UMASK
shell> /path/to/mysqld_safe &

Por padrão o MySQL criará o banco de dados e diretórios RAID com permissão tipo 0700. Você pode modificar este comportamento configurando a variável UMASK_DIR. Se você definir isto, novos diretórios são criados com a combinação de UMASK e UMASK_DIR. Por exemplo, se você quiser ao grupo a todos os novos diretórios, você pode fazer:

shell> UMASK_DIR=504 # = 770 em octal
shell> export UMASK_DIR
shell> /path/to/mysqld_safe &

No MySQL Versão 3.23.25 e acima, o MySQL assume que o valor para UMASK e UMASK_DIR está em octal se ele iniciar com um zero.

Veja mais informações sobre isto na Apêndice F, Variáveis de Ambientes do MySQL.