Trong bài viết này, mình sẽ nhanh chóng hướng dẫn bạn cách xử lý lỗi không tương thích của mysqlclient trên máy Mac sử dụng chip M1 hoặc M2. Bạn có thể gặp lỗi như `Symbol not found: _mysql_affected_rows` khi chạy python app của mình trên M1/M2 chip.

Về cơ bản, các bước sẽ như sau:

  1. Cài Rosetta 2
  2. Cài brew hỗ trợ x86_64 (không phải brew cho M1/M2 hay ảm chip) vào /usr/local/
  3. Dùng brew vừa cài ở trên để cài mysql 5 hoặc 8 (tuỳ phiên bản bạn đang sử dụng).
  4. Cài mysqlclient

Cài Rosetta 2

Mở Terminal mới (nhớ Exit terminal trước đó nếu có). Chạy lệnh sau để cài

softwareupdate --install-rosetta
  1. Sau đó, exit Terminal
  2. Dùng Finder để vào thư mục Applications => Utilities
  3. Nhấp chuột phải vào app Terminal và chọn Get Info.
  4. Ở box Info, check “Open using Rosetta”
  5. Chạy app Terminal

Cài Brew vào /usr/local

Tại Terminal vừa mở, chạy lênh sau để cài brew vào thư mục /usr/local:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Sau khi cài đặt thành công, bạn nhớ update path của mình (thêm trực tiếp vào file ~/.zshrc:

echo ‘export PATH=”/usr/local/bin:$PATH”‘ >> ~/.zshrc
source ~/.zshrc

Cài đặt MySQL 8

Chạy lệnh sau để cài MySQL 8:

arch -x86_64 /usr/local/Homebrew/bin/brew install mysql-client@8.0

Update ~/.zshrc một lần nữa để thêm các path sau:

export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/opt/openssl@3/lib/
export PATH="/usr/local/opt/mysql-client@8.0/bin:$PATH"
alias python86='CPPFLAGS="-I/usr/local/opt/openssl@3/include" LDFLAGS="-L/usr/local/opt/openssl@3/lib" MYSQLCLIENT_CFLAGS="-I/usr/local/opt/mysql-client@8.0/include/mysql" MYSQLCLIENT_LDFLAGS="-L/usr/local/opt/mysql-client@8.0/lib -lmysqlclient" arch -x86_64'

Chú ý, trong config trên, chúng ta cũng tạo thêm lệnh python86 để sử dụng python ở môi trường mô phỏng x86_64. Như thế, chúng ta sẽ không bị vướng các lỗi không tương tích với M1/M2.

Cài đặt mýsqlclient cho python app của bạn

Kích hoạt môi trường virtual environment cho app của bạn. Ví dụ, trên app của mình, sau khi đã tạo virtual environment venv, mình chạy lệnh sau:

. venv/bin/activate

Chạy lệnh sau để cài mysqlclient:

python86 python3 -m pip install --no-cache-dir --force-reinstall mysqlclient
  • python86 là câu lệnh chúng ta khai báo trong .zshrc ở trên.
  • python3 là bản python mà bạn đang sử dụng (vd 3, 3.8, 3.9). Trên máy mình python3 được trỏ tới python3.9

Vậy là bạn đã hoàn tất việc setup, bây giờ app sẽ không còn báo lỗi kết nối với CSDL nữa 🙂

Leave a Reply

Discover more from Bệ Phóng Việt

Subscribe now to keep reading and get access to the full archive.

Continue reading