Use wo stack migrate for MariaDB major upgrade

This commit is contained in:
VirtuBox
2020-10-23 12:50:31 +02:00
parent cbd29a968c
commit bed285abc4
5 changed files with 44 additions and 102 deletions

View File

@@ -226,6 +226,24 @@ if [ -z "$1" ]; then
fi
done
fi
echo -e "${CGREEN}#############################################${CEND}"
echo -e ' wo stack migrate --mariadb '
echo -e "${CGREEN}#############################################${CEND}"
echo -ne " Upgrading mariadb [..]\r"
if {
wo stack migrate --mariadb --force
} >>/var/log/wo/test.log; then
echo -ne " Upgrading mariadb [${CGREEN}OK${CEND}]\\r"
echo -ne '\n'
else
echo -e " Upgrading mariadb [${CRED}FAIL${CEND}]"
echo -ne '\n'
exit_script
fi
echo -e "${CGREEN}#############################################${CEND}"
echo -e ' wo clean '
echo -e "${CGREEN}#############################################${CEND}"

View File

@@ -8,7 +8,7 @@ VERSION = WOVar.wo_version
BANNER = """
WordOps v%s
Copyright (c) 2019 WordOps.
Copyright (c) 2020 WordOps.
""" % VERSION

View File

@@ -1,10 +1,8 @@
import configparser
import os
from cement.core.controller import CementBaseController, expose
from wo.core.apt_repo import WORepo
from wo.cli.plugins.stack_pref import post_pref, pre_pref
from wo.core.aptget import WOAptGet
from wo.core.fileutils import WOFileUtils
from wo.core.logging import Log
from wo.core.mysql import WOMysql
from wo.core.shellexec import WOShellExec
@@ -19,7 +17,10 @@ class WOStackMigrateController(CementBaseController):
description = ('Migrate stack safely')
arguments = [
(['--mariadb'],
dict(help="Migrate database to MariaDB",
dict(help="Migrate/Upgrade database to MariaDB",
action='store_true')),
(['--force'],
dict(help="Force Packages upgrade without any prompt",
action='store_true')),
]
@@ -28,95 +29,45 @@ class WOStackMigrateController(CementBaseController):
# Backup all database
WOMysql.backupAll(self, fulldump=True)
if not WOVar.wo_distro == 'raspbian':
if (not WOVar.wo_platform_codename == 'jessie'):
wo_mysql = ["mariadb-server", "percona-toolkit",
"python3-mysqldb", "mariadb-backup"]
else:
wo_mysql = ["mariadb-server", "percona-toolkit",
"python3-mysql.connector"]
else:
wo_mysql = ["mariadb-server", "percona-toolkit",
"python3-mysqldb"]
# Add MariaDB repo
Log.info(self, "Adding repository for MariaDB, please wait...")
mysql_pref = ("Package: *\nPin: origin sfo1.mirrors.digitalocean.com"
"\nPin-Priority: 1000\n")
with open('/etc/apt/preferences.d/'
'MariaDB.pref', 'w') as mysql_pref_file:
mysql_pref_file.write(mysql_pref)
WORepo.add(self, repo_url=WOVar.wo_mysql_repo)
Log.debug(self, 'Adding key for {0}'
.format(WOVar.wo_mysql_repo))
WORepo.add_key(self, '0xcbcb082a1bb943db',
keyserver="keyserver.ubuntu.com")
config = configparser.ConfigParser()
if os.path.exists('/etc/mysql/conf.d/my.cnf'):
config.read('/etc/mysql/conf.d/my.cnf')
else:
config.read(os.path.expanduser("~")+'/.my.cnf')
try:
chars = config['client']['password']
except Exception as e:
Log.error(self, "Error: process exited with error %s"
% e)
Log.debug(self, "Pre-seeding MariaDB")
Log.debug(self, "echo \"mariadb-server-10.3 "
"mysql-server/root_password "
"password \" | "
"debconf-set-selections")
WOShellExec.cmd_exec(self, "echo \"mariadb-server-10.3 "
"mysql-server/root_password "
"password {chars}\" | "
"debconf-set-selections"
.format(chars=chars),
log=False)
Log.debug(self, "echo \"mariadb-server-10.3 "
"mysql-server/root_password_again "
"password \" | "
"debconf-set-selections")
WOShellExec.cmd_exec(self, "echo \"mariadb-server-10.3 "
"mysql-server/root_password_again "
"password {chars}\" | "
"debconf-set-selections"
.format(chars=chars),
log=False)
pre_pref(self, WOVar.wo_mysql)
# Install MariaDB
apt_packages = wo_mysql
Log.info(self, "Updating apt-cache, hang on...")
WOAptGet.update(self)
Log.info(self, "Installing MariaDB, hang on...")
WOAptGet.remove(self, ["mysql-common", "libmysqlclient18"])
WOAptGet.remove(self, ["mariadb-server"])
WOAptGet.auto_remove(self)
WOAptGet.install(self, apt_packages)
WOAptGet.install(self, WOVar.wo_mysql)
post_pref(self, WOVar.wo_mysql, [])
WOShellExec.cmd_exec(self, 'systemctl daemon-reload')
WOFileUtils.mvfile(
self, '/etc/mysql/my.cnf', '/etc/mysql/my.cnf.old')
WOFileUtils.create_symlink(
self, ['/etc/mysql/mariadb.cnf', '/etc/mysql/my.cnf'])
@expose(hide=True)
def default(self):
if ((not self.app.pargs.mariadb)):
pargs = self.app.pargs
if ((not pargs.mariadb)):
self.app.args.print_help()
if self.app.pargs.mariadb:
if pargs.mariadb:
if WOVar.wo_mysql_host != "localhost":
Log.error(
self, "Remote MySQL server in use, skipping local install")
if (WOShellExec.cmd_exec(self, "mysqladmin ping") and
(not WOAptGet.is_installed(self, 'mariadb-server'))):
if (WOShellExec.cmd_exec(self, "mysqladmin ping")):
Log.info(self, "If your database size is big, "
"migration may take some time.")
Log.info(self, "During migration non nginx-cached parts of "
"your site may remain down")
start_migrate = input("Type \"mariadb\" to continue:")
if start_migrate != "mariadb":
Log.error(self, "Not starting migration")
if not pargs.force:
start_upgrade = input("Do you want to continue:[y/N]")
if start_upgrade != "Y" and start_upgrade != "y":
Log.error(self, "Not starting package update")
self.migrate_mariadb()
else:
Log.error(self, "Your current MySQL is not alive or "

View File

@@ -37,17 +37,7 @@ def pre_pref(self, apt_packages):
with open('/etc/apt/preferences.d/'
'MariaDB.pref', 'w') as mysql_pref_file:
mysql_pref_file.write(mysql_pref)
if not os.path.exists('/etc/apt/sources.list.d/wo-repo.list'):
WORepo.add(self, repo_url=WOVar.wo_mysql_repo)
else:
if not WOFileUtils.grepcheck(
self, '/etc/apt/sources.list.d/wo-repo.list',
'MariaDB/repo/10.3'):
WORepo.add(self, repo_url=WOVar.wo_mysql_repo)
else:
WOFileUtils.searchreplace(
self, '/etc/apt/sources.list.d/wo-repo.list',
'10.3', '10.5')
WORepo.add_key(self, '0xcbcb082a1bb943db',
keyserver='keyserver.ubuntu.com')
WORepo.add_key(self, '0xF1656F24C74CD1D8',
@@ -996,10 +986,6 @@ def post_pref(self, apt_packages, packages, upgrade=False):
WOTemplate.deploy(
self, '/etc/mysql/mariadb.conf.d/50-server.cnf',
'my.mustache', data)
WOFileUtils.mvfile(
self, '/etc/mysql/my.cnf', '/etc/mysql/my.cnf.old')
WOFileUtils.create_symlink(
self, ['/etc/mysql/mariadb.cnf', '/etc/mysql/my.cnf'])
else:
WOTemplate.deploy(
self, '/etc/mysql/my.cnf', 'my.mustache', data)

View File

@@ -294,12 +294,6 @@ class WOStackUpgradeController(CementBaseController):
# additional pre_pref
if "nginx-custom" in apt_packages:
pre_pref(self, WOVar.wo_nginx)
if "mariadb-server" in apt_packages:
mariadbmajorupgrade = bool(
WOFileUtils.grepcheck(
self, '/etc/apt/sources.list.d/wo-repo.list',
'MariaDB/repo/10.3'))
pre_pref(self, WOVar.wo_mysql)
Log.wait(self, "Updating APT cache")
# apt-get update
WOAptGet.update(self)
@@ -312,17 +306,10 @@ class WOStackUpgradeController(CementBaseController):
# redis pre_pref
if "redis-server" in apt_packages:
pre_pref(self, WOVar.wo_redis)
# mariadb upgrade
if ("mariadb-server" in apt_packages and
mariadbmajorupgrade is True):
WOMysql.backupAll(self, fulldump=True)
WOAptGet.remove(self, ["mariadb-server"])
# upgrade packages
WOAptGet.install(self, apt_packages)
Log.wait(self, "Configuring APT Packages")
post_pref(self, apt_packages, [], True)
if "mariadb-server" in apt_packages:
WOShellExec.cmd_exec(self, 'mysql_upgrade')
Log.valide(self, "Configuring APT Packages")
# Post Actions after package updates