Dram

Рейтинг
1115
Регистрация
28.06.2008

Есть два пути у меня в дебиане:

1. /usr/local/etc/ дальше пусто

2. /etc/munin/plugin-conf.d с файлом munin-node

в нем прописано:

[mysql*]

env.mysqlopts -u root -pПАРОЛЬ

env.mysqladmin /usr/bin/mysqladmin

env.mysqlshow /usr/bin/mysqlshow

env.mysqluser root

env.mysqlpassword ПАРОЛЬ

Ваш файл не работает, ошибка такая: (вероятно перл виноват?)

# munin-run mysql_qcache --debug
# Processing plugin configuration from /etc/munin/plugin-conf.d/munin-node
# Setting /rgid/ruid/ to /113/65534/
# Setting /egid/euid/ to /113 113/65534/
# Setting up environment
# Environment mysqlpassword = ПАРОЛЬ
# Environment mysqladmin = /usr/bin/mysqladmin
# Environment mysqluser = root
# Environment mysqlshow = /usr/bin/mysqlshow
# Environment mysqlopts = -u root -pПАРОЛЬ
# About to run '/etc/munin/plugins/mysql_qcache'
Can't exec "/etc/munin/plugins/mysql_qcache": No such file or directory at /usr/share/perl5/Munin/Node/Service.pm line 263.
# FATAL: Failed to exec.

Проблемные плагины пометил на скрине. До них и после них плагины работают.

Вот код плагина:

#!/usr/bin/perl
# -*- perl -*-

use strict;

my $MYSQLADMIN = $ENV{mysqladmin} || "mysqladmin";
my $COMMAND = "$MYSQLADMIN $ENV{mysqlopts} extended-status";

my %WANTED = ( "Qcache_queries_in_cache" => "queries");

my %WANTEDTYPE = ( "Qcache_queries_in_cache" => "GAUGE");

my $arg = shift();

if ($arg eq 'config') {
print_config();
exit();
} elsif ($arg eq 'autoconf') {
unless (test_service() ) {
print "yes\n";
} else {
print "no\n";
}
exit;
}


open(SERVICE, "$COMMAND |")
or die("Coult not execute '$COMMAND': $!");

while (<SERVICE>) {
my ($k, $v) = (m/(\w+).*?(\d+(?:\.\d+)?)/);
next unless ($k);
if (exists $WANTED{$k} ) {
print("$WANTED{$k}.value $v\n");
}
}

close(SERVICE);


sub print_config {

my $num = 0;

print('graph_title MySQL Queries in cache
graph_args --base 1000
graph_vlabel queries
graph_category db
graph_info Plugin available at <a href="http://rodolphe.quiedeville.org/hack/munin/">http://rodolphe.quiedeville.org/hack/munin/</a>
');

for my $key (keys %WANTED) {
my $title = $WANTED{$key};
print("$title.label ${title}\n",
"$title.min 0\n",
"$title.type ".$WANTEDTYPE{$key}."\n",
"$title.max 500000\n",
"$title.draw ", ($num) ? "STACK" : "AREA" , "\n",
);
$num++;
}

}


sub test_service {

my $return = 1;

system ("$MYSQLADMIN --version >/dev/null 2>/dev/null");
if ($? == 0)
{
system ("$COMMAND >/dev/null 2>/dev/null");
if ($? == 0)
{
print "yes\n";
$return = 0;
}
else
{
print "no (could not connect to mysql)\n";
}
}
else
{
print "no (mysqladmin not found)\n";
}
exit $return;
}
png 180440.png

Посмотрел у плагинов мускуля которые работают и у тех которые не работают - написано одинаково:

#!/usr/bin/perl

команда что вы написали на Дебиан не выполняется

В логах мунина за сегодня по запросу "qcache" ничего не нашло.

Версия

This is perl 5, version 24, subversion 1 (v5.24.1) built for x86_64-linux-gnu-thread-multi

jkm, спасибо помогло!

В общем при удалении через пхп майадмин она удалялась командой

DROP VIEW transaction_registry;

Я выполнил

DROP TABLE transaction_registry;

но это не удалило таблицу до конца. Я зашел в /var/lib/mysql/mysql и там был 1 файл этой таблицы. Я удалил его по ftp, далее перезапустил мускуль и создал таблицу заново

CREATE TABLE `transaction_registry` (
`transaction_id` bigint(20) UNSIGNED NOT NULL,
`commit_id` bigint(20) UNSIGNED NOT NULL,
`begin_timestamp` timestamp(6) NOT NULL DEFAULT '0000-00-00 00:00:00.000000',
`commit_timestamp` timestamp(6) NOT NULL DEFAULT '0000-00-00 00:00:00.000000',
`isolation_level` enum('READ-UNCOMMITTED','READ-COMMITTED','REPEATABLE-READ','SERIALIZABLE') COLLATE utf8_bin NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

--
-- Индексы сохранённых таблиц
--

--
-- Индексы таблицы `transaction_registry`
--
ALTER TABLE `transaction_registry`
ADD PRIMARY KEY (`transaction_id`),
ADD UNIQUE KEY `commit_id` (`commit_id`),
ADD KEY `begin_timestamp` (`begin_timestamp`),
ADD KEY `commit_timestamp` (`commit_timestamp`,`transaction_id`);

По делу плиз, эта мелочь отвлекает от стола, гости обижаются :))

Перенес на боевом - все ок.

Была одна проблема.

Сайты не работали, хотя мускуль стартовал и проблем не было.

Оказывается в бузе мускуля при обновлении пропали юзеры баз данных.

Перенес их из бекапа и все стало ок.

В общем все равно где то я ошибаюсь. Фиг знает как у меня вчера получилось завершить sudo mysql_upgrade --force -p на ОК.

Сегодня решил еще раз пройтись по командам на тестовом сервере чтобы уже потом быстро обновить на боевом.

Итак:

1. Развернул снимок на идентичный ВПС.

/etc/init.d/mysql stop

2. cp -r /var/lib/mysql/* /var/lib/mysql2

3. sudo apt-get --purge remove mariadb*

sudo apt-get autoremove

sudo apt-get autoclean

4. apt-get update

apt-get install dirmngr curl -y

curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | bash

apt-get update

apt-get install mariadb-server -y

/etc/init.d/mysql stop

5. Вернул базы и файл ibdata1 из /var/lib/mysql2 в /var/lib/mysql/

6. chown -R mysql:mysql /var/lib/mysql

7. /etc/init.d/mysql start

На этом этапе все ок, мускуль запустился, версия 10.3

Осталось последний шаг:

sudo mysql_upgrade --force -p

на что получаю

Phase 1/7: Checking and upgrading mysql database
Processing databases
mysql
mysql.column_stats OK
mysql.columns_priv OK
mysql.db OK
mysql.event OK
mysql.func OK
mysql.gtid_slave_pos
Error : Table 'mysql.gtid_slave_pos' doesn't exist in engine
status : Operation failed
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
Error : Table 'mysql.innodb_index_stats' doesn't exist in engine
status : Operation failed
mysql.innodb_table_stats
Error : Table 'mysql.innodb_table_stats' doesn't exist in engine
status : Operation failed
mysql.plugin OK
mysql.proc OK
mysql.procs_priv OK
mysql.proxies_priv OK
mysql.roles_mapping OK
mysql.servers 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.transaction_registry
Error : Table 'mysql.transaction_registry' doesn't exist in engine
status : Operation failed
mysql.user OK

Repairing tables
mysql.gtid_slave_pos
Error : Table 'mysql.gtid_slave_pos' doesn't exist in engine
status : Operation failed
mysql.innodb_index_stats
Error : Table 'mysql.innodb_index_stats' doesn't exist in engine
status : Operation failed
mysql.innodb_table_stats
Error : Table 'mysql.innodb_table_stats' doesn't exist in engine
status : Operation failed
mysql.transaction_registry
Error : Table 'mysql.transaction_registry' doesn't exist in engine
status : Operation failed
Phase 2/7: Installing used storage engines... Skipped
Phase 3/7: Fixing views
Phase 4/7: Running 'mysql_fix_privilege_tables'
ERROR 1932 (42S02) at line 635: Table 'mysql.innodb_index_stats' doesn't exist in engine
ERROR 1243 (HY000) at line 636: Unknown prepared statement handler (stmt) given to EXECUTE
ERROR 1932 (42S02) at line 638: Table 'mysql.innodb_table_stats' doesn't exist in engine
ERROR 1243 (HY000) at line 639: Unknown prepared statement handler (stmt) given to EXECUTE
ERROR 1932 (42S02) at line 643: Table 'mysql.innodb_index_stats' doesn't exist in engine
ERROR 1932 (42S02) at line 647: Table 'mysql.innodb_table_stats' doesn't exist in engine
ERROR 1932 (42S02) at line 650: Table 'mysql.innodb_table_stats' doesn't exist in engine
FATAL ERROR: Upgrade failed

попробовал удалить папку с базой mysql и залить ее из бекапа - не помогло. Что не так?

---------- Добавлено 31.12.2018 в 16:41 ----------

решение проблемы тут http://qaru.site/questions/839308/mysqlupgrade-failed-innodb-tables-doesnt-exist - в ответе "ОБНОВЛЕНО Fix For: MariaDB 10"

Проблему решил так:

удалил папку /var/lib/mysql/mysql

залил туда старую из бекапа и сделал sudo mysql_upgrade --force -p

все прошло на - ОК



---------- Добавлено 30.12.2018 в 20:26 ----------

Ошибки в пхпмайадмин убрал так

apt-get --purge remove phpmyadmin
sudo apt-get install phpmyadmin

P.S. обновление провел так:

Забекапил my.cnf

переназвал папку /var/lib/0mysql

sudo apt-get --purge remove mariadb*

sudo apt-get autoremove

sudo apt-get autoclean

apt-get update

apt-get install dirmngr curl -y

curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | bash

apt-get update

apt-get install mariadb-server -y

вернул базы в /var/lib/mysql

sudo mysql_upgrade --force -p

apt-get --purge remove phpmyadmin

sudo apt-get install phpmyadmin

Всего: 6928