Friday, July 9, 2021

Enable desktop sharing on Ubuntu 20.04 Focal Fossa (VNC Protocol)


  • เปิด Settings => Sharing


  • check => Allow connections to control the screen
  • Access Options แล้วแต่เราจะเลือกให้
  • ถ้าให้ host กด accept ให้เมื่อ request มา เลือก
  • New connections must ask for access
  • หรือให้ client ใส่รหัสผ่านได้เลยเลือก 
  • Require a password
  • ตรง Networks ก็ เปิดซะ 
  • เป็นอันเรียบร้อย

Add

  • ถ้า client remote ไม่ได้ขึ้น error แบบนี้

the authentication mechanism requested cannot be provided by the computer

  • แก้โดยพิมพ์คำสั่งนี้ใน terminal

$ gsettings set org.gnome.Vino require-encryption false

Ref

  • https://linuxconfig.org/remote-desktop-sharing-on-ubuntu-20-04-focal-fossa
  • https://ubuntuforums.org/showthread.php?t=2391847

Ubuntu 20.04 – Cannot connect MySQL Workbench to MySQL server

An AppArmor policy prevents this sender from sending this message to this recipient; type="method_call", sender=":1.125" (uid=1000 pid=7944 comm="/snap/mysql-workbench-community/5/usr/bin/mysql- wo" label="snap.mysql-workbench-community.mysql-workbench- community (enforce)") interface="org.freedesktop.Secret.Service" member="OpenSession” error name="(unset)" requested_reply="0" destination=":1.13" (uid=1000 pid=2044 comm="/usr/bin/gnome- keyring-daemon –daemonize –login" label="unconfined")

Please:

1 Check that MySQL is running on address localhost

2 Check that MySQL is reachable on port 3306 (note: 3306 is the default, but this can be changed)

3 Check the user root has rights to connect to localhost from your address (MySQL rights define what clients can connect to the server and from which machines)

4 Make sure you are both providing a password if needed and using the correct password for localhost connecting from the host address you're connecting from


Solved

$ sudo snap connect mysql-workbench-community:password-manager-service :password-manager-service

  • เพียงเท่านี้ mysql-workbench เราก็จะใช้งานได้ปกติ (ถ้าไม่มีข้อผิดพลาดอื่นๆ นะ)

Add

  • ในกรณีที่คำใช้คำสั่งด้านบนแล้ว error แบบนี้

error: snap "snapd" has "auto-refresh" change in progress

  • ให้เราใช้คำสั่งนี้ เพื่อดู package ที่มัน auto-refresh อยู่

 $ sudo snap changes  


  • มีรายการ ID=13 ที่ รอ update อยู่ ให้เราเปิดดูใน Ubuntu Software ว่ามี snap package บางตัวที่รออัพเดทอยู่

  • อัพเดทเรียบร้อยแล้วก็รันคำสั่ง ด้านบนใหม่อีกครั้ง

$ sudo snap connect mysql-workbench-community:password-manager-service :password-manager-service

Ref

  • https://askubuntu.com/questions/1242026/cannot-connect-mysql-workbench-to-mysql-server
  • https://itectec.com/ubuntu/ubuntu-cannot-connect-mysql-workbench-to-mysql-server/
  • https://forums.mysql.com/read.php?152,686820,686870#msg-686870
  • https://www.codegrepper.com/code-examples/typescript/mysql+workbench+an+apparmor+policy+prevents+this+sender
  • https://www.programmersought.com/article/10514316459/
  • https://askubuntu.com/questions/1167566/snap-not-allowing-me-to-remove-or-refresh-anything

Thursday, July 8, 2021

Turn off foreign key checks when restoring a mysql file dump

  • ปัญหาคือ  dump structure และ load outfile  ออก จาก MySQL จากเครื่องหนึ่ง ไปเครื่องอื่น
  • โดย mysqldump เอาแต่โครงสร้างออกมา และ load outfile เอา data ออกต่างหาก ขั้นตอนนี้ไม่พบปัญหา
  • ขั้นตอน mysql  โหลดไฟล์ structure เข้าก็ไม่พบปัญหา
  • แต่ขั้นตอนการ load infile มีปัญหาคือ เรื่องการทำ foreign key ระหว่าง  table กันทำให้เกิด error ไม่สามารถนำข้อมุลเข้าได้

1452 (23000): Cannot add or update a child row: a foreign key constraint fails (... FOREIGN KEY ...) REFERENCES ...

Solved

  • ต้องสั่งปิดการอ้างอิง FK ก่อน แล้ว dump ข้อมูลเข้า 
  • ข้อมูลเข้าเสร็จ แล้ว
  • จากนั้นจึงเปิดใช้ FK คืน

mysql --login-path=rob --init-command="SET SESSION FOREIGN_KEY_CHECKS=0;" < dump.sql

  • หรือใน python ก็จะประมาณนี้

mydb = mysql.connector.connect(

  host="host",

  user="user",

  password="password",

  database="db"

)

mycursor = mydb.cursor()

try:

mycursor.execute("SET SESSION FOREIGN_KEY_CHECKS=0;")

mycursor.execute("load data infile ...")

mydb.commit()

except Exception as ex:

print(ex)

finally:

mycursor.execute("SET SESSION FOREIGN_KEY_CHECKS=1;")

mydb.close()

mycursor.close()

  • สรุปง่ายๆ ทำประมาณนี้
SET FOREIGN_KEY_CHECKS = 0;
LOAD DATA INFILE '/path/to/mytable.txt' INTO TABLE mytable;
SET FOREIGN_KEY_CHECKS = 1;

Ref

  • https://akrabat.com/turn-off-foreign-key-checks-when-restoring-a-mysql-file-dump/
  • https://electrictoolbox.com/load-data-mysql-foreign-key-constraints/

Friday, July 2, 2021

set table name case sensitivity for MySQL and MariaDB

  • ย้ายฐาน mariadb จาก Ubuntu 18.04 ไปยัง Ubuntu 20.04
  • ทั้งที่โครงสร้างทุกอย่างไปครบ กับเจอ error ของโปรแกรมที่มันเคยใช้ได้ แต่ทำไมชี้ไป server ใหม่แล้วมันก็ใช้ไม่ได้ซะงั้น หา table ไม่เจอ ทั้งที่มี  table นั้นอยู่ แต่มันเป็น lower case เฉยๆ

Error Code: 1146. Table 'dbname.L_PROJECTCODE' doesn't exist

Solved

  • MariaDB
  • Ubuntu 18.04 แก้ไขไฟล์ /etc/mysql/my.cnf
  • Ubuntu 20.04 แก้ไขที่ไฟล์ /etc/mysql/mariadb.conf.d/50-server.cnf
  • โดยเพิ่มค่าประมาณนี้เข้าไป lower_case_table_names=1

#

# * InnoDB

#

# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.

# Read the manual for more InnoDB related options. There are many!

innodb_log_file_size = 512M

innodb_strict_mode = 0

lower_case_table_names=1

Ref

  • https://www.simplified.guide/mysql-mariadb/case-insensitive-table-linux
  • http://juuier.blogspot.com/2021/07/mysql-error-code-1118-row-size-too.html

MySQL: Error Code: 1118 Row size too large (> 8126). Changing some columns to TEXT or BLOB

  • ประเด็นคือ ย้าย db mysql (MariaDB) จาก Ubuntu 18.04 ไปยัง Ubuntu 20.04 (MariaDB)
  • ทำประมาณนี้ คือ mysqldump เอาเฉพาะ structure, view, function, procedure ได้ปกติ
  • พอจะ นำไฟล์โครงสร้างฐานด้วยคำสั่ง source pathfile.sql แล้ว error แบบนี้

MySQL: Error Code: 1118 Row size too large (> 8126). Changing some columns to TEXT or BLOB

  • ประมาณว่า column มันเยอะเกินไปประมาณนี้

Solved

  • ไฟล์คอนฟิก MariaDB ใน Ubuntu 18.04 อยู่ที่ /etc/mysql/my.cnf แต่เราไม่ยุ่งกับมันเพราะ คอนฟิกเริ่มต้นบนเวอร์ชั่นนี้ ใช้งานได้ปกติ
  • เราต้องไปแก้ไฟล์คอนฟิก MariaDB ใน Ubuntu 20.04 จะอยู่พาธนี้ /etc/mysql/mariadb.conf.d
  • แก้ไขค่าให้เป็นประมาณนี้ (ถ้ามันไม่มีก็เพิ่มเข้าไป)

#

# * InnoDB

#

# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.

# Read the manual for more InnoDB related options. There are many!

innodb_log_file_size = 512M

innodb_strict_mode = 0

  • จากนั้น restart mariadb ด้วยคำสั่ง
  • $ service mysql restart หรือ $ systemctl restart mysql หรือ $ /etc/init.d/mysql restart

Ref

  • https://stackoverflow.com/questions/22637733/mysql-error-code-1118-row-size-too-large-8126-changing-some-columns-to-te