Eu tinha um servidor MySQL na minha caixa de desenvolvimento do Ubuntu (eu uso um tutorial do tipo "como instalar uma lâmpada no ubuntu") e decidi instalar o mariadb.
Então eu desinstalo o mysql e instalo o mariadb.
~$ mysql --version
mysql Ver 15.1 Distrib 10.0.3-MariaDB, for debian-linux-gnu (i686) using readline 5.1
~$ mysqld --version
mysqld Ver 10.0.3-MariaDB-1~precise-log for debian-linux-gnu on i686 (mariadb.org binary distribution)
A instalação funcionou bem, todo o meu banco de dados funcionou bem, exceto que recebo este erro quando executo o código:
Aviso: mysqli::mysqli() [mysqli.mysqli]: Os cabeçalhos e a versão secundária da biblioteca cliente são incompatíveis. Cabeçalhos:50529 Biblioteca:100003 em /var/www/test.php na linha 5
este é o meu código php:
$mysqli = new mysqli("localhost", "root", "", "test");
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$query = "SELECT * FROM test";
if ($result = $mysqli->query($query)) {
while ($row = $result->fetch_assoc()) {
printf ("%s (%s)\n", $row["id"], $row["name"]);
}
$result->free();
}
$mysqli->close();
e as informações do mysql:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 40
Server version: 10.0.3-MariaDB-1~precise-log mariadb.org binary distribution
Copyright (c) 2000, 2013, Oracle, Monty Program Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> select version();
+------------------------------+
| version() |
+------------------------------+
| 10.0.3-MariaDB-1~precise-log |
+------------------------------+
1 row in set (0.00 sec)
MariaDB [test]> show tables;
+----------------+
| Tables_in_test |
+----------------+
| test |
+----------------+
1 row in set (0.01 sec)
MariaDB [test]> show create table test\G
*************************** 1. row ***************************
Table: test
Create Table: CREATE TABLE `test` (
`id` int(11) DEFAULT NULL,
`name` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
MariaDB [test]> select * from test;
+------+------+
| id | name |
+------+------+
| 1 | dev |
| 2 | qa |
+------+------+
2 rows in set (0.01 sec)
Eu tentei um mysql_upgrade:
mysql_upgrade --force
Phase 1/3: Fixing table and database names
Phase 2/3: Checking and upgrading tables
Processing databases
information_schema
mysql
mysql.column_stats OK
mysql.columns_priv OK
mysql.db OK
mysql.event OK
mysql.func OK
mysql.gtid_slave_pos OK
mysql.help_category OK
mysql.help_keyword OK
mysql.help_relation OK
mysql.help_topic OK
mysql.host OK
mysql.index_stats OK
mysql.innodb_index_stats OK
mysql.innodb_table_stats OK
mysql.ndb_binlog_index OK
mysql.plugin OK
mysql.proc OK
mysql.procs_priv OK
mysql.proxies_priv OK
mysql.servers OK
mysql.slave_master_info OK
mysql.slave_relay_log_info OK
mysql.slave_worker_info OK
mysql.table_stats OK
mysql.tables_priv OK
mysql.time_zone OK
mysql.time_zone_leap_second OK
mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.user OK
performance_schema
test
test.test OK
Phase 3/3: Running 'mysql_fix_privilege_tables'...
OK
Que eu saiba está tudo ok. Qual é o problema?
Além disso, o MariaDB está pronto para produção?
As respostas estão aqui na base de conhecimento do MariaDB: https://kb.askmonty.org/en/installation-issues-with-php5/ - basicamente, o PHP foi compilado contra a biblioteca MySQL 5.5 e você recebe um aviso de incompatibilidade de versão - isso não é um erro e você ainda pode executar seu código normalmente. Existem várias maneiras de resolver isso, a mais óbvia é usar mysqlnd, que é uma extensão nativa do PHP e não está vinculada a nenhuma das antigas bibliotecas mysqlclient.