首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Ubuntu的XAMPP中将MariaDB更改为MySQL (20.04)?

如何在Ubuntu的XAMPP中将MariaDB更改为MySQL (20.04)?
EN

Ask Ubuntu用户
提问于 2021-10-09 14:51:10
回答 1查看 1.2K关注 0票数 0

在xampp中,关于如何将mariadb转换为mysql有很多“方法”(这里这里这里这里等),但它们都是针对windows OS的。

有人知道如何通过bash命令行来实现Ubuntu20.04吗?(最好调到mysql 5.7)

代码语言:javascript
复制
wget https://www.apachefriends.org/xampp-files/7.4.12/xampp-linux-x64-7.4.12-0-installer.run
sudo chmod +x xampp-linux-x64-7.4.12-0-installer.run
sudo ./xampp-linux-x64-7.4.12-0-installer.run --mode unattended --launchapps 0
sudo /opt/lampp/manager-linux-x64.run

wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz
tar -xzf mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz
sudo mv -f mysql-5.7.35-linux-glibc2.12-x86_64/* /opt/lampp/mysql

# and after that?

workaround降级:

MySQL 5.7没有Xampp的版本。据阿帕奇之友称,自XAMPP5.5.30和5.6.14以来,Xampp使用的是MariaDB而不是MySQL (根据发布说明,MySQL的最后一个Xampp是v5.6.12-0 -with MySQL v5.6.25-;然后跳到XAMPP v5.6.14 -with MariaDB v10.0.17-)

代码语言:javascript
复制
RELEASE NOTES

[2015-10-19] XAMPP for Linux 64bit 5.6.14
This version of XAMPP includes:
    - Updated Apache to 2.4.17
    - Updated PHP to 5.6.14
    - Added MariaDB 10.0.17
    - Updated phpMyAdmin 4.5.0.2

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

[2015-08-27] XAMPP for Linux 64bit 5.6.12-0
This version of XAMPP includes:
    - Updated Apache to 2.4.12
    - Updated PHP to 5.6.11
    - Updated MySQL to 5.6.25
    - Updated phpMyAdmin 4.4.12
    - Update OpenSSL to 1.0.1p
    - Phanebook issue with SQLite
    - Fix charset admin pages
    - Added OS X HOW-TO guides
    - Enabled SSL support for PostgreSQL PHP extension
    - Added PHP XMLRPC extension
    - Added PHP MSSQL extension
    - Included new dashboard

所以我找到了一个叫做肉桂灯的包,在以前的版本中有一个带有mysql 5.7中可以降级

但是,我仍然想知道我的问题的答案,如果这样的事情可以在linux上完成的话。

EN

回答 1

Ask Ubuntu用户

回答已采纳

发布于 2022-09-02 10:05:49

长话短说,我已经成功地从MariaDB 10.4.11迁移到MySQL 5.7.38。其原因是检查特定版本的InnoDB引擎,即5.7.38。

实际上,使用bitnami照明灯栈是相当容易的。此外,使用bitnami,您可以很容易地配置为运行MariaDB和MySQL 1,并通过管理器(或通过systemd服务)控制它们。

我的第一次尝试是在bitnami包MySQL中找到最接近的版本,并下载这个包,但是它在web上(版本高于7.1.33 (MySQL 5.7.28),低于7.2.24 (切换到MySQL 8))。

我的下一个最佳选择是抓住任何可用的肉桂包(7.2.26),只交换已安装的MySQL包。(对不起,这里没有wget,因为计时器显示了链接。请更新,如果你能找到他们的档案)

首先运行installer以获得完整的选项列表(选择要安装的模块):

代码语言:javascript
复制
./bitnami-lampstack-7.2.26-0-linux-x64-installer.run --help

并使用覆盖设置进行安装(我更愿意以用户身份安装它,因此这里没有sudo ):

代码语言:javascript
复制
./bitnami-lampstack-7.2.26-0-linux-x64-installer.run --prefix /opt/bitnami/lampstack-7.2.26.0 --disable-components varnish,zendframework,symfony,codeigniter,cakephp,smarty,laravel --base_password testpass --apache_server_port 9955 --apache_server_ssl_port 9943  --mysql_port 3309 --mode unattended

此时,您将得到一个在选定端口上运行服务的工作灯堆栈。可悲的是,bitnami从一开始就没有禁用应用程序的标志,所以我们需要手动这样做:

代码语言:javascript
复制
$ cd /opt/bitnami/lampstack-7.2.26.0 && ./ctlscript.sh status  && ./ctlscript.sh stop
apache already running
mysql already running
Syntax OK
/opt/bitnami/lampstack-7.2.26.0/apache2/scripts/ctl.sh : httpd stopped
/opt/bitnami/lampstack-7.2.26.0/mysql/scripts/ctl.sh : mysql stopped

安装选择的MySQL版本

正如您已经注意到的,然后通过ctl脚本在其“脚本”文件夹中控制lamp堆栈模块。因此,最重要的部分是在MySQL的自定义部分中使用这些脚本。

代码语言:javascript
复制
$ mv mysql mysql_original
$ mkdir mysql && mkdir mysql/{tmp,run,data}
$ cp -r mysql_original/scripts mysql/
$ cp mysql_original/my.cnf mysql ##it should be adapted to your previous configuration, but keep defined directory variables
$ wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz
$ tar -xzf mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz  -C mysql --strip-components 1 ##untar archive contents into mysql skipping root directory
$ ln -s /opt/bitnami/lampstack-7.2.26.0/mysql/bin/mysqld /opt/bitnami/lampstack-7.2.26.0/mysql/bin/mysqld.bin ##or fix mysql ctl.sh to use mysqld instead of mysqld.bin

现在您有两个选项:从旧的MariaDB安装复制“数据”或插入新DB,然后导入转储。第一个不可靠,所以我更喜欢第二个。

选项1迁移MariaDB 'data'

NB!备份'data‘文件夹和/或创建DB转储(跳过选项1并跳转到选项2)。

代码语言:javascript
复制
$ cp -R old_data/ /opt/bitnami/lampstack-7.2.26.0/mysql/
$ ./opt/bitnami/lampstack-7.2.26.0/ctlscript.sh start mysql

如果你遵循这个选项并被降级,你肯定会得到这个错误。

代码语言:javascript
复制
 InnoDB: Unsupported redo log format. The redo log was created with MariaDB 10.2.44. Please follow the instructions at http://dev.mysql.com/doc/refman/5.7/en/upgrading-downgrading.html

NB! 潜在有害行为解决方法是删除ib_logfile*文件,然后再次启动服务。

然后,您将得到一堆错误,而db将启动并运行。

代码语言:javascript
复制
[ERROR] InnoDB: Your database may be corrupt or you may have copied the InnoDB tablespace but not the InnoDB log files. Please refer to http://dev.mysql.com/doc/refman/5.7/en/forcing-innodb-recovery.html for information about forcing recovery

代码语言:javascript
复制
[ERROR] InnoDB: Page [page id: space=0, page number=734] log sequence number 3261161573 is in the future! Current system log sequence number 3221898782.
[ERROR] InnoDB: Your database may be corrupt or you may have copied the InnoDB tablespace but not the InnoDB log files. Please refer to http://dev.mysql.com/doc/refman/5.7/en/forcing-innodb-recovery.html for information about forcing recovery.

之后,您需要通过调用mysql_upgrade来升级DB。让我们为此创建ctl_upgrade.sh脚本:

代码语言:javascript
复制
$ vi mysql/scripts/ctl_upgrade.sh

#!/bin/sh
MSQLPATH=/opt/bitnami/lampstack-7.2.26.0/mysql
MYSQL_PIDFILE=$MSQLPATH/run/mysqld.pid

MYSQL_START="$MSQLPATH/bin/mysql_upgrade --defaults-file=$MSQLPATH/my.cnf --socket=$MSQLPATH/tmp/mysql.sock --verbose"

$MYSQL_START >$MSQLPATH/data/mysqld-update.log 2>&1

$ ./mysql/scripts/ctl_upgrade.sh
$ ./mysql/scripts/ctl.sh stop && ./mysql/scripts/ctl.sh start

选项2转储和导入DB

我不会深入到这里,因为这个过程相当简单。弃尸:

代码语言:javascript
复制
$ vi /opt/bitnami/mysqldump.sh

#!/bin/sh
## Dump DB with no DB name in two rows:
## 1. dump structure with routines and no data
## 2. dump only data in ansi mode
## I avoid dumping with auto creating database to avoid collisions with existing databases on import.
MYSQL_BIN=mysqldump ##note, here i use old mysql binary available globally
PASSWORD=
HOST=$1
USER=root
DATABASE=$2

IGNORED_TABLES_STRING='' #if you want to skip some tables from dumping

now="$(date +'%d_%m_%Y_%H_%M')"
filename="${DATABASE}_db_backup_$now.sql"
backupfolder="./mysqldump"
logfile="$backupfolder/"backup_log_"$(date +'%Y_%m')".txt

echo "Dump structure started at $(date +'%d-%m-%Y %H:%M:%S')" >> "$logfile"
    $MYSQL_BIN --host=${HOST} --user=${USER} --password=${PASSWORD} --no-create-db ${DATABASE} --single-transaction --no-data --routines --log-error $logfile > $backupfolder/${DB_FILE} 
echo "Dump structure finished at $(date +'%d-%m-%Y %H:%M:%S')" >> "$logfile"

echo "Dumping contents"
##note dumped db will be in ansi mode, for better [compatibility][5] 
$MYSQL_BIN --compatible=ansi --host=${HOST} --user=${USER} --password=${PASSWORD} --no-create-db ${DATABASE} --no-create-info --skip-triggers ${IGNORED_TABLES_STRING} --log-error $logfile >> $backupfolder/${DB_FILE} 

$ cd /opt/bitnami && mkdir mysqldump && sh mysqldump.sh localhost db_to_dump
## stop old lampp services
$ ./opt/lampp/ctlscript.sh stop

导入新DB:

代码语言:javascript
复制
$ vi /opt/bitnami/mysqlrestore.sh

#!/bin/sh
## Note here we use lampstack MySQL binary (not added to PATH)
MYSQL_BIN="/opt/bitnami/lampstack-7.2.26.0/mysql/bin/mysql --socket=/opt/bitnami/lampstack-7.2.26.0/mysql/tmp/mysql.sock"

PASSWORD=
filename="${1}"
USER=root
DATABASE=$2

now="$(date +'%d_%m_%Y_%H_%M')"

echo "Creating DB $DATABASE"
$MYSQL_BIN --user=$USER --password=$PASSWORD -e "CREATE DATABASE $DATABASE;"

MYSQL_BIN -u $USER --password=$PASSWORD $DATABASE < $filename

$ cd /opt/bitnami/lampstack-7.2.26.0/mysql/scripts && cp ctl.sh ctl_init.sh && vi ctl_init.sh
change MYSQL_START to 
MYSQL_START="/opt/bitnami/lampstack-7.2.26.0/mysql/bin/mysqld --socket=/opt/bitnami/lampstack-7.2.26.0/mysql/tmp/mysql.sock  --datadir=/opt/bitnami/lampstack-7.2.26.0/mysql/data --log-error=/opt/bitnami/lampstack-7.2.26.0/mysql/tmp/mysqld_init.log  --pid-file=$MYSQL_PIDFILE --lower-case-table-names=1 --user=mysql --initialize"
 NB! if you need root without password use --initialize-insecure

$ ./ctl_init.sh start
$ ./ctl.sh start
$ cd /opt/bitnami && ./mysqlrestore.sh mysqldump/dumped_file.sql db_new_name

签入“数据”目录中的日志。移民已完成。

可选:将MariaDB安装到into堆栈管理器

我选择了具有相同InnoDB版本的InnoDB。

代码语言:javascript
复制
 $ cd /opt && mkdir mariadb && mkdir mariadb/10.2.44-systemd 
 $ wget https://archive.mariadb.org/mariadb-10.2.44/bintar-linux-systemd-x86_64/mariadb-10.2.44-linux-systemd-x86_64.tar.gz
 $ tar -xzf mariadb-10.2.44-linux-systemd-x86_64.tar.gz -C 10.2.44-systemd --strip-components 1 
 $ cd 10.2.44-systemd && mkdir {tmp,run,data}
 $ cp /opt/bitnami/lampstack-7.2.26.0/mysql/scripts scripts
 $ cp /opt/bitnami/lampstack-7.2.26.0/mysql/my.cnf my.cnf
 $ ln -s /opt/mariadb/10.2.44-systemd /opt/bitnami/lampstack-7.2.26.0/mariadb

 At this point bitnami is aware that mariab module is installed, yet we need to update paths in copied ctl scripts to point to mariadb.

 $ cd scripts
 $ grep -rlZ "/opt/bitnami/lampstack-7.2.26.0/mysql" . ../my.cnf | xargs -0 sed -i 's/\/opt\/bitnami\/lampstack-7.2.26.0\/mysql/\/opt\/mariadb\/10.2.44-systemd/g'
 
 However, PhpMyAdmin will fail to connect, because in conf it points to mysql socket. Workaround is to create mariadb socket into mysql dir.

 $ vi ctl.sh
  In start_mysql() function in success clause (ERR -eq 0) add 
  ln -s/opt/mariadb/10.2.44-systemd/tmp/mysql.sock /opt/bitnami/lampstack-7.2.26.0/mysql/tmp/mysql.sock

  And in stop_mysql() in (RUNNING -eq 0) clause put
  rm /opt/bitnami/lampstack-7.2.26.0/mysql/tmp/mysql.sock

 Now you can run both MariaDB and MySQL and easily control them via manager.

可选: lampstack

的Systemd服务

代码语言:javascript
复制
$ sudo vi /etc/systemd/system/xampp.target
[Unit]
Description=Lampp target 
Requires=multi-user.target
After=multi-user.target
AllowIsolate=yes

$ sudo vi /etc/systemd/system/xampp@.service
[Unit]
Description=Start Xampp module: %I
PartOf=xampp.target

[Service]
Type=simple
User=your_username
ExecStart=/opt/bin/xampp_ctl.sh start %i
ExecStop=/opt/bin/xampp_ctl.sh stop %i 
Restart=on-failure
RemainAfterExit=yes

[Install]
WantedBy=xampp.target

$ daemon-reload
$ systemctl enable xampp@apache  ## for service name after @ use ctlscript tags (check by calling ctlscript.sh help)
$ systemctl enable xampp@mariadb ## to start mariadb by default
$ systemctl enable xampp.target
$ systemctl disable xampp.service ## old xampp service
$ ln -s /opt/bitnami/lampstack-7.2.26.0/ctlscript.sh /opt/bin/xampp_ctl.sh
$ systemctl start xampp.target

:我相信使用xampp包是可能的,但乍一看,我发现它的配置很麻烦,因为所有模块都有一些连接。

票数 1
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1368303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档