在xampp中,关于如何将mariadb转换为mysql有很多“方法”(这里、这里、这里、这里等),但它们都是针对windows OS的。
有人知道如何通过bash命令行来实现Ubuntu20.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?
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-)
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上完成的话。
发布于 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以获得完整的选项列表(选择要安装的模块):
./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此时,您将得到一个在选定端口上运行服务的工作灯堆栈。可悲的是,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正如您已经注意到的,然后通过ctl脚本在其“脚本”文件夹中控制lamp堆栈模块。因此,最重要的部分是在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安装复制“数据”或插入新DB,然后导入转储。第一个不可靠,所以我更喜欢第二个。
NB!备份'data‘文件夹和/或创建DB转储(跳过选项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.htmlNB! 潜在有害行为解决方法是删除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来升级DB。让我们为此创建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我不会深入到这里,因为这个过程相当简单。弃尸:
$ 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:
$ 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签入“数据”目录中的日志。移民已完成。
中
我选择了具有相同InnoDB版本的InnoDB。
$ 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.的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/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包是可能的,但乍一看,我发现它的配置很麻烦,因为所有模块都有一些连接。
https://askubuntu.com/questions/1368303
复制相似问题