Tuesday, August 31, 2021

This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled

  • mysql import db_structure.sql แล้วพบ error ประมาณนี้

This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)

  • คล้ายๆ ที่เคยเจอ ตอนสร้าง function ใน mysql ใหม่ แล้ว error แบบนี้ทำให้สร้าง function ไม่่ได้ 

Solved method 1 เพิ่มคำสั้งก่อน execute

mycursor.execute("show full tables where Table_Type = 'BASE TABLE';")
mycursor.execute("SET SESSION FOREIGN_KEY_CHECKS=0;")
mycursor.execute("SET sql_mode='';")
mycursor.execute("SET GLOBAL log_bin_trust_function_creators = 1;")
Solved method 2 เพิ่มหรือปรับใน mysql.ini ไฟล์

log_bin_trust_function_creators = 1;

Related

  • https://juuier.blogspot.com/2021/02/error-1418-this-function-has-none-of.html

Ref

  • https://stackoverflow.com/questions/26015160/deterministic-no-sql-or-reads-sql-data-in-its-declaration-and-binary-logging-i

Incorrect datetime value: '0000-00-00 00:00:00'

  • ปัญญา dump mysql ได้แล้ว (load outfile) แต่ load infile ไม่ได้

error

  • Incorrect datetime value: '0000-00-00 00:00:00'
  • ปัญหาประมาณ DB ต้นทางที่ export มา คอนฟิก เค้าอนุญาต ให้ datetime เป็น 0000-00-00 00:00:00 ได้
  • แต่ client ไม่อนุญาติ ให้ datetime type เป็น 0000-00-00 00:00:00  หว่า

Solved

  • Method 1:  ไปแก้ config MySQL Server ที่ client ประมาณ sql_mode นี่แหละ 
  • Method 2: execute คำสั่งนี้ก่อน load infile หรือ ก่อน insert

set sql_mode=''; # '' is two sigle qoute

  • เช่น python

mycursor.execute("show full tables where Table_Type = 'BASE TABLE';")
mycursor.execute("SET SESSION FOREIGN_KEY_CHECKS=0;")
mycursor.execute("SET sql_mode='';")

Ref

  • https://stackoverflow.com/questions/35565128/mysql-incorrect-datetime-value-0000-00-00-000000



MYSQL Error: 13 (Permission Denied)

Env

  • Server ubuntu 18.04, MySQL Server CE
  • Client ubuntu 20.04, MySQL Server CE

Problem

  • ปัญหานี้เกิดตอน เราทำการ load outfile  ที่ server
  • จากนั้น scp ไฟล์เหล่านั้นมาที่ client 
  • จากนั้นใช้  python3 load infile แล้วใช้ไม่ได้ซะงั้น
  • มัน exception ออกมาประมาณ 
  • MYSQL Error: 13 (Permission Denied)
  • ซึ่งก่อนหน้านี้ใช้ script นี้รันจาก Client เป็น Ubuntu 20.04, MariaDB แล้ว Server เป็น Ubuntu 18.04 MariaDB มันก็ใช้งานได้นะ สงสัย Env ของ OS และ MySQL มันต่างกัน

Solved

  • ย้ายไฟล์มาด้วย scp แล้ว folder ที่ client ให้เราตั้ง owner เป็น mysql:mysql

sudo chown -R mysql:mysql /client_path/load_outfile_folder/

Ref

  • https://www.w3schools.com/python/python_mysql_getstarted.asp
  • https://askubuntu.com/questions/1228827/mysql-error-13-permission-denied

Thursday, August 26, 2021

Ubuntu 20.04 can not client remote MySQL Host 'xxx.xx.xxx.xxx' is not allowed to connect to this MySQL server

Error

Host 'xxx.xx.xxx.xxx' is not allowed to connect to this MySQL server 

  • ติดตั้ง Ubuntu 20.04 ลง MySQL Server แต่ client ใช้ root remote มาไม่ได้
  • แก้ไข mysqld.cnf ใส่ bind-address=0.0.0.0
  • สั่ง sudo systemctl restart mysql.service แล้วมันก็ยัง remote ไม่ได้

# /etc/mysql/mysql.conf.d/mysqld.cnf

[mysqld]

pid-file        = /var/run/mysqld/mysqld.pid

socket          = /var/run/mysqld/mysqld.sock

datadir         = /var/lib/mysql

log-error       = /var/log/mysql/error.log

bind-address            = 0.0.0.0

Solved

  • สร้าง user ใหม่เลยไม่ต้องใช้ root แล้วเพิ่มสิทธิ์ให้เทียบเท่า root

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' WITH GRANT OPTION;

CREATE USER 'username'@'%' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION;

FLUSH PRIVILEGES;

REF

  • https://stackoverflow.com/questions/1559955/host-xxx-xx-xxx-xxx-is-not-allowed-to-connect-to-this-mysql-server

Popular Posts