cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core
curl https://gist.githubusercontent.com/labocho/f7da1dd8964d5ac50e5f399ef72973ab/raw/8e0572e6eef18536fdb129eb73de73a60685c449/[email protected] > Formula/[email protected]
brew install [email protected]
# to revert
git checkout Formula/[email protected]
Last active
April 10, 2020 07:40
-
-
Save labocho/f7da1dd8964d5ac50e5f399ef72973ab to your computer and use it in GitHub Desktop.
Homebrew formula for mysql 5.7.22
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| class MysqlAT57 < Formula | |
| desc "Open source relational database management system" | |
| homepage "https://dev.mysql.com/doc/refman/5.7/en/" | |
| url "https://cdn.mysql.com/archives/mysql-5.7/mysql-boost-5.7.22.tar.gz" | |
| sha256 "5b2a61700af7c99f5630a7dfdb099af9283c3029843cddd9e123bcdbcc4aad03" | |
| keg_only :versioned_formula | |
| depends_on "cmake" => :build | |
| depends_on "[email protected]" | |
| uses_from_macos "libedit" | |
| def datadir | |
| var/"mysql" | |
| end | |
| def install | |
| # -DINSTALL_* are relative to `CMAKE_INSTALL_PREFIX` (`prefix`) | |
| args = %W[ | |
| -DCOMPILATION_COMMENT=Homebrew | |
| -DDEFAULT_CHARSET=utf8 | |
| -DDEFAULT_COLLATION=utf8_general_ci | |
| -DINSTALL_DOCDIR=share/doc/#{name} | |
| -DINSTALL_INCLUDEDIR=include/mysql | |
| -DINSTALL_INFODIR=share/info | |
| -DINSTALL_MANDIR=share/man | |
| -DINSTALL_MYSQLSHAREDIR=share/mysql | |
| -DINSTALL_PLUGINDIR=lib/plugin | |
| -DMYSQL_DATADIR=#{datadir} | |
| -DSYSCONFDIR=#{etc} | |
| -DWITH_BOOST=boost | |
| -DWITH_EDITLINE=system | |
| -DWITH_SSL=bundled | |
| -DWITH_UNIT_TESTS=OFF | |
| -DWITH_EMBEDDED_SERVER=ON | |
| -DENABLED_LOCAL_INFILE=1 | |
| -DWITH_INNODB_MEMCACHED=ON | |
| ] | |
| system "cmake", ".", *std_cmake_args, *args | |
| system "make" | |
| system "make", "install" | |
| (prefix/"mysql-test").cd do | |
| system "./mysql-test-run.pl", "status", "--vardir=#{Dir.mktmpdir}" | |
| end | |
| # Remove the tests directory | |
| rm_rf prefix/"mysql-test" | |
| # Don't create databases inside of the prefix! | |
| # See: https://github.com/Homebrew/homebrew/issues/4975 | |
| rm_rf prefix/"data" | |
| # Fix up the control script and link into bin. | |
| inreplace "#{prefix}/support-files/mysql.server", | |
| /^(PATH=".*)(")/, | |
| "\\1:#{HOMEBREW_PREFIX}/bin\\2" | |
| bin.install_symlink prefix/"support-files/mysql.server" | |
| # Install my.cnf that binds to 127.0.0.1 by default | |
| (buildpath/"my.cnf").write <<~EOS | |
| # Default Homebrew MySQL server config | |
| [mysqld] | |
| # Only allow connections from localhost | |
| bind-address = 127.0.0.1 | |
| EOS | |
| etc.install "my.cnf" | |
| end | |
| def post_install | |
| # Make sure the datadir exists | |
| datadir.mkpath | |
| unless (datadir/"mysql/general_log.CSM").exist? | |
| ENV["TMPDIR"] = nil | |
| system bin/"mysqld", "--initialize-insecure", "--user=#{ENV["USER"]}", | |
| "--basedir=#{prefix}", "--datadir=#{datadir}", "--tmpdir=/tmp" | |
| end | |
| end | |
| def caveats | |
| s = <<~EOS | |
| We've installed your MySQL database without a root password. To secure it run: | |
| mysql_secure_installation | |
| MySQL is configured to only allow connections from localhost by default | |
| To connect run: | |
| mysql -uroot | |
| EOS | |
| if (my_cnf = ["/etc/my.cnf", "/etc/mysql/my.cnf"].find { |x| File.exist? x }) | |
| s += <<~EOS | |
| A "#{my_cnf}" from another install may interfere with a Homebrew-built | |
| server starting up correctly. | |
| EOS | |
| end | |
| s | |
| end | |
| plist_options :manual => "#{HOMEBREW_PREFIX}/opt/[email protected]/bin/mysql.server start" | |
| def plist | |
| <<~EOS | |
| <?xml version="1.0" encoding="UTF-8"?> | |
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |
| <plist version="1.0"> | |
| <dict> | |
| <key>KeepAlive</key> | |
| <true/> | |
| <key>Label</key> | |
| <string>#{plist_name}</string> | |
| <key>ProgramArguments</key> | |
| <array> | |
| <string>#{opt_bin}/mysqld_safe</string> | |
| <string>--datadir=#{datadir}</string> | |
| </array> | |
| <key>RunAtLoad</key> | |
| <true/> | |
| <key>WorkingDirectory</key> | |
| <string>#{datadir}</string> | |
| </dict> | |
| </plist> | |
| EOS | |
| end | |
| test do | |
| # Expects datadir to be a completely clean dir, which testpath isn't. | |
| dir = Dir.mktmpdir | |
| system bin/"mysqld", "--initialize-insecure", "--user=#{ENV["USER"]}", | |
| "--basedir=#{prefix}", "--datadir=#{dir}", "--tmpdir=#{dir}" | |
| port = free_port | |
| pid = fork do | |
| exec bin/"mysqld", "--bind-address=127.0.0.1", "--datadir=#{dir}", "--port=#{port}" | |
| end | |
| sleep 2 | |
| output = shell_output("curl 127.0.0.1:#{port}") | |
| output.force_encoding("ASCII-8BIT") if output.respond_to?(:force_encoding) | |
| assert_match version.to_s, output | |
| ensure | |
| Process.kill(9, pid) | |
| Process.wait(pid) | |
| end | |
| end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment