our
$VERSION
=
'0.000038'
;
sub
provider {
'MariaDB'
}
sub
verify_provider {
my
$class
=
shift
;
my
(
$bin
,
$provider
) =
@_
;
$provider
//=
$class
->provider;
my
(
$v
) = capture {
system
(
$bin
,
'-V'
) };
return
1
if
$v
=~ m/
$provider
/i;
return
0;
}
sub
server_bin_list {
qw/mariadbd mysqld/
}
sub
client_bin_list {
qw/mariadb mysql/
}
sub
install_bin_list {
qw/mariadb-install-db mysql_install_db/
}
sub
dbd_driver_order {
my
$class
=
shift
;
$class
->SUPER::dbd_driver_order(
$ENV
{QDB_MARIADB_DBD},
$ENV
{QDB_MYSQLD_DBD}) }
sub
list_env_vars {
my
$self
=
shift
;
my
@list
=
$self
->SUPER::list_env_vars();
return
(
@list
,
map
{
my
$x
=
"$_"
;
$x
=~ s/MYSQL/MARIADB/g;
$x
}
@list
,
);
}
sub
_default_config {
my
$self
=
shift
;
my
%config
=
$self
->SUPER::_default_config(
@_
);
if
(
defined
(
$ENV
{QDB_MARIADB_SSL_FIPS})) {
$config
{mysqld}->{
'ssl_fips_mode'
} =
"$ENV{QDB_MARIADB_SSL_FIPS}"
;
}
$config
{mysqld}->{
'query_cache_limit'
} =
'1M'
;
$config
{mysqld}->{
'query_cache_size'
} =
'20M'
;
$config
{mariadbd} =
$config
{mysqld};
$config
{mariadb} =
$config
{mysql};
$config
{mariadb_safe} =
$config
{mysql_safe};
return
%config
;
}
sub
viable {
my
$this
=
shift
;
my
(
$spec
) =
@_
;
my
%check
= (
ref
(
$this
) ?
%$this
: (),
$this
->_default_paths,
%$spec
);
my
@bad
;
push
@bad
=>
"Could not load either 'DBD::MariaDB' or 'DBD::mysql', needed for everything"
unless
$this
->dbd_driver;
if
(!
keys
%{
$this
->provider_info}) {
push
@bad
=>
"Installed MySQL is not "
.
$this
->provider;
}
else
{
if
(
$spec
->{bootstrap}) {
push
@bad
=>
"'mysqld' and 'mariadbd' commands are missing, needed for bootstrap"
unless
$check
{server} && -x
$check
{server};
}
elsif
(
$spec
->{autostart}) {
push
@bad
=>
"'mysqld' and 'mariadbd' commands are missing, needed for autostart"
unless
$check
{server} && -x
$check
{server};
}
if
(
$spec
->{load_sql}) {
push
@bad
=>
"'mysql' and 'mariadb' commands are missing, needed for load_sql"
unless
$check
{client} && -x
$check
{client};
}
}
return
(1,
undef
)
unless
@bad
;
return
(0,
join
"\n"
=>
@bad
);
}
sub
bootstrap {
my
$self
=
shift
;
my
$init_file
=
$self
->SUPER::bootstrap(
@_
);
$self
->write_config(
mariadbd
=> {
skip
=>
qr/innodb/
i,
add
=> {
'default-storage-engine'
=>
'MyISAM'
}
},
mysqld
=> {
skip
=>
qr/innodb/
i,
add
=> {
'default-storage-engine'
=>
'MyISAM'
}
}
);
$self
->run_command([
$self
->start_command,
'--bootstrap'
], {
stdin
=>
$init_file
});
$self
->write_config();
return
;
}
1;