AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1368303
Accepted
acgbox
acgbox
Asked: 2021-10-10 06:51:10 +0800 CST2021-10-10 06:51:10 +0800 CST 2021-10-10 06:51:10 +0800 CST

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

  • 772

在 xampp 中有很多关于如何将 mariadb 更改为 mysql 的“howto”(HERE、HERE、HERE、HERE等),但它们都适用于 Windows 操作系统

任何人都知道如何通过 bash 命令行为 Ubuntu 20.04 做到这一点?(最好是mysql 5.7)

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?

在此处输入图像描述

降级的解决方法:

没有带有 MySQL 5.7 的 Xampp 版本。根据Apache Friends的说法,从 XAMPP 5.5.30 和 5.6.14 开始,XAMPP 发布了 MariaDB 而不是 MySQL(根据 RELEASE NOTES,最后一个带有 MySQL 的 Xampp 是 v5.6.12-0 -with MySQL v5.6.25-;然后跳转到 Xampp v5 .6.14 - 使用 MariaDB v10.0.17-)

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

所以我找到了一个名为bitnami lamp的包,在以前的版本中它有一个 mysql 5.7并且可以降级

在此处输入图像描述

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

20.04
  • 1 1 个回答
  • 527 Views

1 个回答

  • Voted
  1. Best Answer
    diabolusss
    2022-09-03T02:05:49+08:002022-09-03T02:05:49+08:00

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

    实际上,使用 bitnami lampstack 相当容易。此外,使用 bitnami,您可以轻松配置为同时运行 MariaDB 和 MySQL [1](同时在不同端口上或在同一默认端口上一次一个)并通过管理器(或通过 systemd 服务)控制它们。

    我的第一次尝试是在 bitnami lampstack 包更改日志中找到最接近的 MySQL 版本并下载此包,但它在网络上缺失(版本高于 7.1.33(MySQL 5.7.28)和低于 7.2.24(切换到 MySQL 8 ))。

    我的下一个最佳选择是获取任何可用的 bitnami 包(7.2.26)并交换已安装的 MySQL 包。(抱歉,这里没有 wget,因为链接是由计时器显示的。如果你能找到他们的档案,请更新)

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

    ./bitnami-lampstack-7.2.26-0-linux-x64-installer.run --help
    

    并使用覆盖设置进行安装(我更喜欢以用户身份安装,所以这里没有 sudo):

    ./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
    

    此时,您将获得一个在选定端口上运行服务的工作 LAMP 堆栈。可悲的是,但 bitnami 没有禁止应用程序启动的标志,因此我们需要手动执行此操作:

    $ 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 版本

    正如您所注意到的,lampstack 模块是通过其“脚本”文件夹中的 ctl 脚本控制的。所以最重要的部分是将这些脚本放在 MySQL 的自定义安装中。

    $ 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 安装中复制“数据”或初始化新数据库,然后导入转储。第一个不可靠,所以我更喜欢第二个。

    选项 1 迁移 MariaDB“数据”

    注意!备份“数据”文件夹和/或创建数据库转储(通过跳过选项 1 并跳转到选项 2)。

    $ cp -R old_data/ /opt/bitnami/lampstack-7.2.26.0/mysql/
    $ ./opt/bitnami/lampstack-7.2.26.0/ctlscript.sh start mysql
    

    如果您遵循此选项并正在降级,那么您肯定会收到此错误。

     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
    

    注意!可能有害 的操作 解决方法是删除 ib_logfile* 文件,然后重新启动服务。

    然后你会遇到一堆错误,但 db 会启动并运行。

    [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
    

    和

    [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 来升级数据库。让我们为此创建 ctl_upgrade.sh 脚本:

    $ 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 转储和导入数据库

    我不会在这里深入探讨,因为这个过程相当简单。转储:

    $ 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
    

    导入新数据库:

    $ 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 安装到 Lampstack 管理器中

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

     $ 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 服务

    $ 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/[email protected]
    [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
    

    [1]:我相信 xampp linux 软件包是可能的,但乍一看我发现它的配置很混乱,因为所有模块都有些连接。

    • 0

相关问题

  • 如何在 18.04..20.04 上设置本地通配符 (127.0.0.1) 域解析?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve