2023-12-13    2023-12-13    428 字  1 分钟

brew 安装和配置 mysql

使用 brew 安装

1
brew install mysql

安装完成后会出现如下显示

/opt/homebrew/Cellar/mysql/8.0.30/bin/mysqld –initialize-insecure –user=xxx –basedir=/opt/homebrew/Cellar/mysql/8.0.30 –datadir=/opt/homebrew/var/mysql –tmpdir=/tmp

使用方法

启动数据库

1
mysql.server start

关闭

1
mysql.server stop

客户端链接

1
mysql -hlocalhost -P 3306 -uroot -p

参考

nix 安装和配置 mysql

临时使用

  • 创建一个 mysql 目录 mkdir -p mysql
  • 在该文件中添加内容如下的脚本 mysql.nix
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# https://jeancharles.quillet.org/posts/2022-01-30-Local-mariadb-server-with-nix-shell.html
let pkgs = import <nixpkgs> {};
in pkgs.mkShell {
  buildInputs = [ pkgs.mariadb ];
  shellHook = ''
    MYSQL_BASEDIR=${pkgs.mariadb}
    MYSQL_HOME=$PWD/mysql
    MYSQL_DATADIR=$MYSQL_HOME/data
    export MYSQL_UNIX_PORT=$MYSQL_HOME/mysql.sock
    MYSQL_PID_FILE=$MYSQL_HOME/mysql.pid
    alias mysql='mysql -u root'

    if [ ! -d "$MYSQL_HOME" ]; then
      # Make sure to use normal authentication method otherwise we can only
      # connect with unix account. But users do not actually exists in nix.
      mysql_install_db --auth-root-authentication-method=normal \
        --datadir=$MYSQL_DATADIR --basedir=$MYSQL_BASEDIR \
        --pid-file=$MYSQL_PID_FILE
    fi

    # Starts the daemon
    mysqld --datadir=$MYSQL_DATADIR --pid-file=$MYSQL_PID_FILE \
      --socket=$MYSQL_UNIX_PORT 2> $MYSQL_HOME/mysql.log &
    MYSQL_PID=$!

    finish()
    {
      mysqladmin -u root --socket=$MYSQL_UNIX_PORT shutdown
      kill $MYSQL_PID
      wait $MYSQL_PID
    }
    trap finish EXIT
  '';
}
  • 在该目录执行 nix-shell ./mysql.nix , 开启 mysqld
  • 执行 mariadb-secure-installation 修改密码
  • 登录操作 mysql -uroot -p 来管理 mysql 数据库

作为常用 app 使用

在系统中安装 mysql

  • 在你的配置文件中添加
1
environment.systemPackages = [ pkgs.mysql ];
  • 执行下面代码初始化 mysql 数据库
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
MYSQL_BASEDIR=${pkgs.mariadb}
MYSQL_HOME=$HOME/.cache/mysql
MYSQL_DATADIR=$MYSQL_HOME/data
export MYSQL_UNIX_PORT=$MYSQL_HOME/mysql.sock
MYSQL_PID_FILE=$MYSQL_HOME/mysql.pid

if [[ ! -d "$MYSQL_HOME" ]]; then
    mysql_install_db --auth-root-authentication-method=normal \
        --datadir=$MYSQL_DATADIR --basedir=$MYSQL_BASEDIR \
        --pid-file=$MYSQL_PID_FILE
fi
  • 作为 daemon 启动 mysql
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
MYSQL_BASEDIR=${pkgs.mariadb}
MYSQL_HOME=$HOME/.cache/mysql
MYSQL_DATADIR=$MYSQL_HOME/data
export MYSQL_UNIX_PORT=$MYSQL_HOME/mysql.sock
MYSQL_PID_FILE=$MYSQL_HOME/mysql.pid
# Starts the daemon
mysqld --datadir=$MYSQL_DATADIR --pid-file=$MYSQL_PID_FILE \
  --socket=$MYSQL_UNIX_PORT 2> $MYSQL_HOME/mysql.log &
MYSQL_PID=$!

finish()
{
  mysqladmin -u root --socket=$MYSQL_UNIX_PORT shutdown
  kill $MYSQL_PID
  wait $MYSQL_PID
}
trap finish EXIT
  • 其他的使用方法和临时使用方法一致