【问题标题】:Is it possible to upgrade the MySQL in MAMP to MySQL 5.7?是否可以将 MAMP 中的 MySQL 升级到 MySQL 5.7?
【发布时间】:2016-03-15 00:14:22
【问题描述】:

是否可以将 MAMP MySQL 库升级到 5.7? 我目前正在运行 5.6(我升级到使用 MAMP 的升级脚本 ) 或者我需要在我的系统上本地安装 MySQL 吗? (macOS 10.11 El Capitan)

如果有人能指出我正确的方向……谢谢!

【问题讨论】:

    标签: mysql macos mamp


    【解决方案1】:

    将 MAMP 升级到 Mysql 5.7

    #!/bin/sh
    
    wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.10-osx10.10-x86_64.tar.gz
    tar xfvz mysql-5.7*
    
    echo "stopping mamp"
    sudo /Applications/MAMP/bin/stop.sh
    sudo killall httpd mysqld
    
    echo "creating backup"
    sudo rsync -arv --progress /Applications/MAMP ~/Desktop/MAMP-Backup
    
    echo "copy bin"
    sudo rsync -arv --progress mysql-5.7.*/bin/* /Applications/MAMP/Library/bin/ --exclude=mysqld_multi --exclude=mysqld_safe 
    
    echo "copy share"
    sudo rsync -arv --progress mysql-5.7.*/share/* /Applications/MAMP/Library/share/
    
    echo "fixing access (workaround)"
    sudo chmod -R o+rw  /Applications/MAMP/db/mysql/
    sudo chmod -R o+rw  /Applications/MAMP/tmp/mysql/
    sudo chmod -R o+rw  "/Library/Application Support/appsolute/MAMP PRO/db/mysql/"
    
    echo "starting mamp"
    sudo /Applications/MAMP/bin/start.sh
    
    echo "migrate to new version"
    /Applications/MAMP/Library/bin/mysql_upgrade -u root --password=root -h 127.0.0.1
    

    【讨论】:

    • 运行正常但出现错误:无法通过套接字'/tmp/mysql.sock' 连接到本地 MySQL 服务器,所以我刚刚安装了最新版本的 MAMP,它有 5.6.35 和 utf8mb4。继续前进
    • @i_a 我必须添加一个符号链接来解决这个问题:sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock /tmp/mysql.sock
    • 我不得不触摸 /Applications/MAMP/logs/mysql_error_log.err
    • 2017 年更新,使用此 URL 查找适用于您的特定操作系统版本的最新 MySQL 的下载路径:dev.mysql.com/downloads/mysql
    • @deweydb 虽然该符号链接在技术上可能有效,但没有必要。 Please see my new answer 解释了如何让 MAMP 干净地使用它自己的 /Applications/MAMP/tmp/mysql.sock` 路径,而不必这样做。
    【解决方案2】:

    更新Version 5.0 of MAMP now includes MySQL 5.7 already in the installer! 只需升级您的核心 MAMP 设置,您就可以使用 MySQL,而不必像这样跳过技术障碍。

    在下方留下答案,供需要的人参考。


    虽然我在这里阅读了这个答案和 cmets——以及 GitHub 上的一些类似的链接教程等——但在一些教程中有些事情让我感到困惑。例如设置chmod -O o+rw 的说明,甚至是关于创建指向/tmp/mysql.sock 的符号链接的评论;为什么在开箱即用的 MAMP 应该是独立的并且不需要此类更改时这样做?以下是我根据在 mac OS 10.3.4 (High Sierra) 上为 MAMP 4.4.1 升级 MySQL 的经验整理的说明。

    首先,获取 MySQL 5.7 的 macOS 二进制文件的副本;请注意,在我发布此答案时,MySQL 5.7.22 是当前版本,因此请将此 URL 调整为您可能想要使用的任何新版本:

    curl -OL https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.22-macos10.13-x86_64.tar.gz
    

    像这样解压:

    tar xfvz mysql-5.7*
    

    通过 Rsync 将 bin/share/ 的内容复制到 MAMP 中,如下所示:

    sudo rsync -arv --progress mysql-5.7.*/bin/* /Applications/MAMP/Library/bin/ --exclude=mysqld_multi --exclude=mysqld_safe
    sudo rsync -arv --progress mysql-5.7.*/share/* /Applications/MAMP/Library/share/
    

    像这样复制现有的 MySQL 5.6 数据库目录;请注意,升级过程中暂时需要mysql56 目录,但在 MySQL 5.7 的其余部分升级完成后可以丢弃:

    sudo cp -r /Applications/MAMP/db/mysql56 /Applications/MAMP/db/mysql57
    

    完成后,像这样删除 MySQL 数据库特定的二进制文件以进行升级:

    sudo rm -rf /Applications/MAMP/db/mysql57/mysql/innodb_*
    sudo rm -rf /Applications/MAMP/db/mysql57/mysql/slave_*
    

    而不是将权限更改为o+rw,只需将 DB 目录的所有者更改为您当前的用户;这与 MAMP 安装这些东西的方式相匹配:

    sudo chown -R ${USER}:admin /Applications/MAMP/db/mysql57
    

    现在运行这个 Sed 命令来调整 mysqld_safe 脚本以指向新的 MySQL 5.7 路径;您可能只需在文本编辑器中打开此文件,并将所有 mysql56 实例更改为 mysql57

    sed -i.bak 's/mysql56/mysql57/g' /Applications/MAMP/Library/bin/mysqld_safe
    

    最后,如果你使用 MAMP 并设置了一个 my.cnf 文件,那应该设置在 /Applications/MAMP/conf/my.cnf... 但是通过这次升级,MAMP 中 my.cnf 的默认搜索路径将是 /usr/local/mysql/etc/ 而不是预期的/Applications/MAMP/conf/,因为这是新二进制文件期望设置的位置。显然,此时我们不会重新编译 MySQL,因此要使您的 MAMP 设置再次真正可移植,最简单/最简单的方法是更改​​ startMysql.sh 中的这一行:

    /Applications/MAMP/Library/bin/mysqld_safe --port=8889 --socket=/Applications/MAMP/tmp/mysql/mysql.sock --pid-file=/Applications/MAMP/tmp/mysql/mysql.pid --log-error=/Applications/MAMP/logs/mysql_error_log &
    

    到这个;请注意,我们在所有 otger 之前添加了 --defaults-extra-file= 选项:

    /Applications/MAMP/Library/bin/mysqld_safe --defaults-extra-file=/Applications/MAMP/conf/my.cnf --port=8889 --socket=/Applications/MAMP/tmp/mysql/mysql.sock --pid-file=/Applications/MAMP/tmp/mysql/mysql.pid --log-error=/Applications/MAMP/logs/mysql_error_log &
    

    完成所有命令行工作后,通过应用程序启动 MAMP,启动 MySQL 和 Apache 服务器,然后返回到类似运行此命令以升级数据库的命令:

    /Applications/MAMP/Library/bin/mysql_upgrade --user=root --password=root --port=3306 --socket=/Applications/MAMP/tmp/mysql/mysql.sock --force
    

    最后运行此命令,为 MAMP 路径正确设置 mysql.sock,而不是 /tmp/mysql.sock 路径:

    /Applications/MAMP/Library/bin/mysql_config_editor --verbose set --socket=/Applications/MAMP/tmp/mysql/mysql.sock
    

    当这一切都完成后,您已经确认 MySQL 正在按预期运行,只需像这样折腾旧的 MySQL 5.6 目录:

    sudo rm -rf /Applications/MAMP/db/mysql56
    

    完成所有这些后,您应该都可以在 MAMP 4.4.1 下干净地使用 MySQL 5.7。

    【讨论】:

    • 可以确认这对我在 OS X (10.13.6) High Sierra 中的 Mamp Pro 3.5.2 版有效。唯一的区别是~/Applications/MAMP/db/ 中的mysql 5.6 目录被命名为mysql,而我现在有了mysql57
    【解决方案3】:

    我在升级到Giacomo1968’s answer 中描述的 MySQL 5.7.22 时遇到了问题。

    更新后的程序在 El Capitan 上运行良好,使用 MySQL 5.7.18。

    我已经为此过程编写了一个更新的 bash 脚本:

    #!/bin/sh
    
    curl -OL https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.18-macos10.12-x86_64.tar.gz
    tar xfvz mysql-5.7*
    
    echo "Stopping MAMP"
    
    sudo /Applications/MAMP/bin/stop.sh
    
    sudo killall httpd mysqld
    
    echo "Copy Bin"
    
    sudo rsync -arv --progress mysql-5.7.*/bin/* /Applications/MAMP/Library/bin/ --exclude=mysqld_multi --exclude=mysqld_safe
    
    echo "Copy Share"
    
    sudo rsync -arv --progress mysql-5.7.*/share/* /Applications/MAMP/Library/share/
    
    echo "Building Mysql 5.7 Folder"
    
    sudo cp -r /Applications/MAMP/db/mysql56 /Applications/MAMP/db/mysql57
    
    sudo rm -rf /Applications/MAMP/db/mysql57/mysql/innodb_*
    
    sudo rm -rf /Applications/MAMP/db/mysql57/mysql/slave_*
    
    sudo chown -R ${USER}:admin /Applications/MAMP/db/mysql57
    
    sed -i.bak 's/mysql56/mysql57/g' /Applications/MAMP/Library/bin/mysqld_safe
    
    echo "Finally, if you use MAMP and set a my.cnf file, that should be set in /Applications/MAMP/conf/my.cnf… But by doing this upgrade, the default search path of the my.cnf in MAMP will be /usr/local/mysql/etc/ instead of the expected /Applications/MAMP/conf/ since that is where the new binary expects it to be set. Clearly we’re not going to recompile MySQL at this point so the cleanest/simplest thing to do to make your MAMP setup truly portable again is to change this line in the startMysql.sh from this:
    /Applications/MAMP/Library/bin/mysqld_safe --port=8889 --socket=/Applications/MAMP/tmp/mysql/mysql.sock --pid-file=/Applications/MAMP/tmp/mysql/mysql.pid --log-error=/Applications/MAMP/logs/mysql_error_log &
    To this; note we are adding the --defaults-extra-file= option before all the otgers:
    /Applications/MAMP/Library/bin/mysqld_safe --defaults-extra-file=/Applications/MAMP/conf/my.cnf --port=8889 --socket=/Applications/MAMP/tmp/mysql/mysql.sock --pid-file=/Applications/MAMP/tmp/mysql/mysql.pid --log-error=/Applications/MAMP/logs/mysql_error_log &"
    
    read -p "With all of that command line work done, launch MAMP via the application, start the MySQL and Apache servers."
    
    read -p "Press [Enter] key to start migration..."
    
    echo "Starting MySQL"
    
    /Applications/MAMP/Library/bin/mysql_upgrade --user=root --password=root --port=3306 --socket=/Applications/MAMP/tmp/mysql/mysql.sock --force
    
    echo "Migrate, finaly, to new version"
    
    /Applications/MAMP/Library/bin/mysql_config_editor --verbose set --socket=/Applications/MAMP/tmp/mysql/mysql.sock
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-11
      • 2014-12-16
      • 2012-03-06
      • 1970-01-01
      • 2013-12-08
      • 2018-07-18
      • 2021-07-08
      • 2020-12-07
      相关资源
      最近更新 更多