Cara menggunakan mysql in pythonanywhere

Diantara banyaknya sistem database, barangkali Mysql atau pun mariadb adalah aplikasi SQL yang paling banyak digunakan, lalu bagaimana dengan Flask Python dapatkah menggunakan sistem database MySql dalam proses aplikasinya. 

Oke, untuk module mysql agar dapat dijalankan dengan python cukup banyak , nah diantaranya untuk penglguna Flask Python dapat menggunakan Flask-MySqlDB , namun perlu diketahuai kalo modul ini membutuhkan header development mysql client , jadi sebelum anda melakukan installaso Flask-mysqldb terlebih dahulu server yang anda gunakan telah terinstall library untuk mysql development client , bagi pengguna ubuntu server install terlebih dahulu libmysqlclient-dev  dengan menggunakan perintah :

# sudo apt install libmysqlclient-dev

setelah menginstall library tersebut selanjunya install flask-mysqldb dengan perintah : pip3 install flask-msqldb

untuk proses selanjutnya adalah untuk memasukkan module tersebut didalam script flask python

from flask import Flask
from flask_mysqldb import MySQL

app = Flask(__name__)

app.config['MYSQL_HOST'] = 'localhost'
app.config['MYSQL_USER'] = 'namausersql'
app.config['MYSQL_PASSWORD'] = 'pssqordusersql'
app.config['MYSQL_DB'] = 'namadatabasesql'
app.config['MYSQL_PORT'] = 3306
mysql = MySQL(app)
@app.route('/') 
def users():       
cur = mysql.connection.cursor() 
cur.execute("SELECT usermhost FROM mysql.user")        
rv = cur.fetchall()
cur.close()
return str(rv)

Cara menggunakan mysql in pythonanywhere


Saya mengalami masalah besar ketika mencoba terhubung ke mysql. Ketika saya menjalankan:

/usr/local/mysql/bin/mysql start

Saya memiliki kesalahan berikut:

Can't connect to local MySQL server through socket '/var/mysql/mysql.sock' (38)

Saya punya di mysql.sockbawah /var/mysqldirektori.

Dalam /etc/my.cnfaku punya:

[client]
port=3306
socket=/var/mysql/mysql.sock

[mysqld]
port=3306
socket=/var/mysql/mysql.sock
key_buffer_size=16M
max_allowed_packet=8M

dan /etc/php.iniaku punya:

; Default socket name for local MySQL connects.  If empty, uses the built-in
; MySQL defaults.
mysql.default_socket = /var/mysql/mysql.sock

Saya telah memulai kembali apache menggunakan sudo /opt/local/apache2/bin/apachectl restart

Tapi saya masih punya kesalahan.

Kalau tidak, saya tidak tahu apakah itu relevan tetapi kapan mysql_config --socketssaya mendapatkannya

--socket         [/tmp/mysql.sock]






Jawaban:


Jika file Anda my.cnf (biasanya di folder / etc / mysql / ) dikonfigurasi dengan benar

socket=/var/lib/mysql/mysql.sock

Anda dapat memeriksa apakah mysql berjalan dengan perintah berikut:

mysqladmin -u root -p status

coba ubah izin Anda ke folder mysql. Jika Anda bekerja secara lokal, Anda dapat mencoba:

sudo chmod -R 755 /var/lib/mysql/

yang menyelesaikannya untukku







Anda yakin telah menginstal mysql dan juga server mysql ..

Sebagai contoh untuk menginstal server mySql saya akan menggunakan yum atau apt untuk menginstal alat baris perintah mysql dan server:

yum -y install mysql mysql-server (or apt-get install mysql mysql-server)

Aktifkan layanan MySQL:

/sbin/chkconfig mysqld on

Mulai server MySQL:

/sbin/service mysqld start

setelah itu setel kata sandi root MySQL:

mysqladmin -u root password 'new-password' (with the quotes)

Saya harap ini membantu.





Solusi cepat yang berfungsi untuk saya: coba gunakan alamat ip lokal (127.0.0.1) alih-alih 'localhost' di mysql_connect (). Ini "memaksa" php untuk terhubung melalui TCP / IP bukannya soket unix.







Saya mendapat kesalahan berikut

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111)

Mencoba beberapa cara dan akhirnya menyelesaikannya melalui cara berikut

sudo gksu gedit /etc/mysql/my.cnf

diubah

#bind-address       = 127.0.0.1

untuk

bind-address        = localhost

dan memulai kembali

sudo /etc/init.d/mysql restart

itu berhasil



Pastikan Anda menjalankan mysqld: /etc/init.d/mysql start



Untuk mencegah masalah terjadi, Anda harus melakukan shutdown server yang anggun dari baris perintah daripada mematikan server.

shutdown -h now

Ini akan menghentikan layanan yang berjalan sebelum mematikan mesin.

Berdasarkan Centos, metode tambahan untuk mendapatkannya kembali ketika Anda mengalami masalah ini adalah memindahkan mysql.sock:

mv /var/lib/mysql/mysql.sock /var/lib/mysql/mysql.sock.bak

service mysqld start

Restart layanan menciptakan entri baru yang disebut mqsql.sock


Saya mendapatkan kesalahan ini ketika saya mengatur tugas cron untuk file saya. Saya mengubah izin file menjadi 777 tetapi tetap tidak berfungsi untuk saya. Akhirnya saya mendapat solusinya. Mungkin itu akan bermanfaat bagi orang lain.

Coba dengan perintah ini:

mysql -h 127.0.0.1 -P 3306 -u root -p

Ingat bahwa -h berarti host , -P berarti port dan -p berarti kata sandi.






Seperti yang dapat dilihat oleh banyak jawaban di sini, ada banyak masalah yang dapat mengakibatkan pesan kesalahan ini ketika Anda memulai layanan MySQL. Masalahnya, MySQL biasanya akan memberi tahu Anda apa yang salah, jika Anda hanya melihat file log yang sesuai.

Misalnya, di Ubuntu, Anda harus memeriksa /var/log/syslog. Karena banyak hal lain mungkin juga masuk ke file ini, Anda mungkin ingin menggunakan grepuntuk melihat pesan mysql, dan tailhanya melihat yang terbaru. Secara keseluruhan, itu mungkin terlihat seperti:

grep mysql /var/log/syslog | tail -50

Jangan membabi buta membuat perubahan pada konfigurasi Anda karena orang lain berkata 'Ini bekerja untuk sistem saya.' Cari tahu apa yang sebenarnya salah dengan sistem Anda dan Anda akan mendapatkan hasil yang lebih baik lebih cepat.




Solusi lain adalah mengedit /etc/my.cnf dan menyertakan host di bagian [klien]

 [client]
 #password       = your_password
 host            = 127.0.0.1
 port            = 3306
 socket          = /var/run/mysql/mysql.sock

Dan kemudian me-restart layanan mysql.

Solusi ini diuji dalam: Versi server: Distribusi sumber 5.5.25a-log



Saya memiliki masalah yang sama dan itu disebabkan oleh pembaruan driver mysql ketika server mysql berjalan. Saya memperbaikinya hanya me-restart mysql dan apache2:

layanan sudo mysql berhenti

sudo service mysql start

sudo service apache2 berhenti

sudo service apache2 mulai



Dalam kasus saya, saya menggunakan Centos 5.5. Saya menemukan bahwa masalahnya adalah karena layanan mysql dihentikan. Jadi saya memulai layanan mysql dengan perintah:

 /etc/init.d/mysqld start

Jadi .. kesalahan konyol.


Jika semuanya bekerja dengan baik dan Anda baru saja mulai melihat kesalahan ini, sebelum Anda melakukan hal lain, pastikan Anda tidak kehabisan ruang disk:

df -h

Jika volume tempat mysql.sock sedang dibuat adalah 100% digunakan, MySql tidak akan dapat membuatnya dan ini akan menjadi penyebab kesalahan ini. Yang perlu Anda lakukan adalah menghapus sesuatu yang tidak diperlukan, seperti file log lama.


coba dengan -h (host) dan -P (port):

mysql -h 127.0.0.1 -P 3306 -u root -p


sudo service mysql start

Ini akan melayani Anda dengan baik. Mungkin ada kemungkinan Anda mengubah beberapa perintah yang memengaruhi konfigurasi mysql.



Ada banyak solusi untuk masalah ini tetapi untuk situasi saya, saya hanya perlu memperbaiki DATE pada mesin / server ( Ubuntu 16.04 Server ).

i) Periksa tanggal server Anda dan perbaiki.

ii) Lari sudo /etc/init.d/mysql restart

Itu harus memulainya.


Saya mendapatkan kesalahan karena saya menjalankan MAMP dan file .sock saya berada di lokasi yang berbeda. Saya baru saja menambahkan tautan simbolis di mana aplikasi berpikir seharusnya menunjuk ke tempat itu sebenarnya dan itu berfungsi seperti pesona.



Saya juga menemukan bahwa ini adalah masalah izin. Saya membandingkan file MySQL dengan instalasi yang berfungsi (keduanya pada Debian 6 squeeze) dan harus membuat perubahan kepemilikan berikut (di manamydatabase ada database yang Anda miliki).

Kepemilikan mysql:mysql:

chown mysql:mysql /var/lib/mysql
chown mysql:mysql /var/lib/mysql/ib*
chown mysql:mysql /var/lib/mysql/mydatabase
chown mysql:mysql /var/lib/mysql/mydatabase/*
chown mysql:mysql /var/lib/mysql/mysql/* 

Kepemilikan mysql:root:

chown mysql:root /var/lib/mysql/mysql
chown mysql:root /var/run/mysqld 

Kepemilikan mysql:adm:

chown mysql:adm /var/log/mysql
chown mysql:adm /var/log/mysql.err
chown mysql:adm /var/log/mysql.log* 


Bagi saya - ini hanyalah kasus MySQL yang membutuhkan waktu lama untuk dimuat. Saya memiliki lebih dari 100.000 tabel di salah satu basis data saya dan akhirnya mulai tetapi jelas harus memakan waktu lama dalam hal ini.


Jika Anda menggunakan AWS (Amazon Web Services) versi Mikro, maka itu adalah masalah memori. Ketika saya berlari

mysql

dari terminal katanya

ERROR 2002 (HY000): Can't connect to local MySQL server through socket /var/run/mysqld/mysqld.sock' (111)

Jadi saya mencoba yang berikut dan itu hanya akan gagal.

service mysqld restart

Setelah banyak pencarian, saya menemukan bahwa Anda harus membuat file swap agar MySQL memiliki cukup memori. Instruksi terdaftar: http://www.prowebdev.us/2012/05/amazon-ec2-linux-micro-swap-space.html .

Kemudian, saya bisa me-restart mysqld.



Anda selalu dapat memulai server mysql dengan menentukan lokasi file mysql.sock menggunakan --socketopsi seperti

mysql --socket=/var/mysql/mysql.sock 

Ini akan berfungsi bahkan jika lokasi file socket di tentukan di lokasi yang berbeda di file my.cnf.


Bagi mereka yang solusinya tidak berhasil, coba:

cd /etc/mysql

periksa apakah my.cnf ada

nano my.cnf

dan pastikan Anda hanya memiliki satu bind-address sebagai berikut:

bind-address = 127.0.0.1

Jika tidak, itu mungkin masalahnya, keluar saja dari nano dan simpan file.

dan service mysql start

Perhatikan bahwa jika Anda tidak memiliki nano (editor teks) cukup instal dengan apt-get install nanodan sekali saja tekan Ctrl + X untuk keluar, jangan lupa untuk mengatakan Y untuk menyimpan dan menggunakan file yang sama)



Saya punya masalah ini juga ketika mencoba untuk memulai server, begitu banyak jawaban di sini yang hanya mengatakan untuk memulai server tidak berfungsi. Hal pertama yang dapat Anda lakukan adalah menjalankan yang berikut untuk melihat apakah ada kesalahan konfigurasi:

/usr/sbin/mysqld --verbose --help 1>/dev/null

Saya memang memiliki satu kesalahan yang muncul:

160816 19:24:33 [Note] /usr/sbin/mysqld (mysqld 5.5.50-0ubuntu0.14.04.1-log) starting as process 9461 ...
160816 19:24:33 [Warning] Using unique option prefix myisam-recover instead of myisam-recover-options is deprecated and will be removed in a future release. Please use the full name instead.
160816 19:24:33 [Note] Plugin 'FEDERATED' is disabled.
160816 19:24:33 [ERROR] /usr/sbin/mysqld: unknown variable 'innodb-online-alter-log-max-size=4294967296'
160816 19:24:33 [ERROR] Aborting

Sederhana grep -HR "innodb-online-alter-log-max-size" /etc/mysql/menunjukkan kepada saya file apa yang berisi baris yang menyinggung, jadi saya menghapus baris itu dari file.

Kemudian, memeriksa /var/log/mysql/error.logfile saya, saya punya:

InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes
InnoDB: than specified in the .cnf file 0 671088640 bytes!
160816 22:46:46 [ERROR] Plugin 'InnoDB' init function returned error.
160816 22:46:46 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
160816 22:46:46 [ERROR] Unknown/unsupported storage engine: InnoDB
160816 22:46:46 [ERROR] Aborting

Berdasarkan pertanyaan ini solusi yang diterima tidak akan berfungsi karena saya bahkan tidak bisa memulai server, jadi saya mengikuti apa yang dikatakan beberapa komentar dan menghapus saya /var/lib/mysql/ib_logfile0dan/var/lib/mysql/ib_logfile1 file .

Ini memungkinkan server untuk memulai dan saya dapat terhubung dan mengeksekusi query, namun memeriksa file log kesalahan saya dengan cepat diisi dengan beberapa puluhan ribu baris seperti ini:

160816 22:52:15  InnoDB: Error: page 1415 log sequence number 82039318708
InnoDB: is in the future! Current system log sequence number 81640793100.
InnoDB: Your database may be corrupt or you may have copied the InnoDB
InnoDB: tablespace but not the InnoDB log files. See
InnoDB: http://dev.mysql.com/doc/refman/5.5/en/forcing-innodb-recovery.html
InnoDB: for more information.

Berdasarkan saran dari sini , untuk memperbaikinya, saya melakukan mysqldump dan memulihkan semua basis data (lihat tautan untuk beberapa solusi lain).

$ mysqldump -u root -p --allow-keywords --add-drop-database --comments --hex-blob --opt --quote-names --databases db_1 db_2 db_3 db_etc > backup-all-databases.sql
$ mysql -u root -p < backup-all-databases.sql

Semuanya tampak berfungsi seperti yang diharapkan sekarang.



Menambahkan

--protocol=tcp 

ke daftar pramaters di koneksi Anda bekerja untuk saya.


Ini cukup baik untukku

sudo /etc/init.d/mysql restart


Saya mengalami masalah ini hari ini. Tak satu pun dari jawaban ini memberikan perbaikan. Saya perlu melakukan perintah berikut (ditemukan di sini https://stackoverflow.com/a/20141146/633107 ) untuk memulai layanan mysql saya:

sudo /etc/init.d/mysql stop
cd /var/lib/mysql/
ls ib_logfile*
mv ib_logfile0 ib_logfile0.bak
mv ib_logfile1 ib_logfile1.bak
... etc ...
/etc/init.d/mysql restart

Ini sebagian ditunjukkan oleh kesalahan berikut di /var/log/mysql/error.log:

140319 11:58:21 InnoDB: Completed initialization of buffer pool
InnoDB: Error: log file ./ib_logfile0 is of different size 0 50331648 bytes
InnoDB: than specified in the .cnf file 0 5242880 bytes!
140319 11:58:21 [ERROR] Plugin 'InnoDB' init function returned error.
140319 11:58:21 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
140319 11:58:21 [ERROR] Unknown/unsupported storage engine: InnoDB
140319 11:58:21 [ERROR] Aborting

Saya juga melihat disk penuh kesalahan, tetapi hanya ketika menjalankan perintah tanpa sudo. Jika pemeriksaan izin gagal, ini melaporkan disk penuh (bahkan ketika partisi Anda bahkan tidak mendekati penuh).


CentOS 7, 64 bit. Instalasi baru.
Dalam kasus saya, kesalahannya adalah karena saya tidak memiliki server MySQL yang tepat dan klien MySQL diinstal.
Menggunakan yum, saya menghapus mariadbdan edisi mysql-komunitas. Saya mengunduh rpm untuk klien dan server dari situs web resmi MySQL dan menginstal server dan klien.

Saat menginstal server, saya diperlihatkan pesan bahwa kata sandi ke akun root untuk MySQL disimpan dalam file yang dapat saya lihat dengan sudo cat /root/.mysql_secret .

Jadi setelah menginstal klien dan server, saya memeriksa apakah MySQL berfungsi (saya pikir saya reboot sebelum melakukannya) dengan perintah sudo service mysql statusdan saya mendapat hasilnya.

Menjalankan MySQL (2601) [Oke]

Saya login ke MySQL menggunakan password dari file .mysql_secret:
mysql -uroot -pdxM01Xfg3DXEPabpf. Perhatikan bahwa dxM01Xfg3DXEPabpfkata sandi yang disebutkan dalam file .mysql_secret.

dan kemudian diketik masukkan perintah berikut di prompt mysql untuk mengubah kata sandi root:

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('somePassword');

Semuanya bekerja dengan baik sejak saat itu.



sudo service mysqld start

Bekerja untuk saya, saya menggunakan Centos


Ini tidak langsung menjawab pertanyaan Anda tetapi sebagian, yaitu menggunakan PythonAnywhere. Saya terus menemukan pertanyaan ini ketika mencari perbaikan jadi saya menambahkannya di sini dengan harapan itu akan membantu orang lain dalam situasi saya.


PythonAnywhere memutuskan untuk mengubah nama host koneksi database untuk meningkatkan efisiensi dan keandalan, sebagaimana dirinci di sini :

Nama host resmi yang harus digunakan untuk menghubungkan ke akun Anda MySQL database contoh telah berubah dari mysql.server ke yourusername .mysql.pythonanywhere-services.com . Ini melewati bagian dari infrastruktur kami yang telah mulai menunjukkan masalah dalam beberapa minggu terakhir, dan itu seharusnya jauh lebih efisien dan dapat diandalkan daripada cara lama.

Karenanya, Anda perlu memperbarui nama host Anda ke nilai yang disorot di atas.


Saya baru saja mengalami masalah ini. setelah seharian memeriksa akhirnya saya mendapat jawaban dengan bahwa file mysql.sock dibuat ketika MariaDB dimulai dan dihapus ketika MariaDB dimatikan. Itu tidak akan ada jika MariaDB tidak berjalan. mungkin Anda tidak menginstal MariaDB. ANDA BISA IKUTI INSTRUKSI DI BAWAH INI: https://www.linode.com/docs/databases/mariadb/how-to-install-mariadb-on-centos-7 BEST


Saya mengalami kesalahan soket ini dan pada dasarnya bermuara pada fakta bahwa MySQL tidak berjalan. Jika Anda menjalankan instalasi baru, pastikan Anda menginstal 1) paket sistem dan 2) installer panel (mysql.prefPane). Pemasang panel akan memungkinkan Anda untuk pergi ke System Preferences dan membuka MySQL, dan kemudian menjalankan instance.

Perhatikan bahwa, pada instalasi baru, saya perlu mengatur ulang komputer saya agar perubahan dapat diterapkan dengan benar. Setelah reboot, saya menjalankan instance baru dan dapat membuka koneksi ke localhost tanpa masalah.

Juga dari catatan, saya tampaknya telah menginstal versi MySQL sebelumnya tetapi telah menghapus panel, yang membuatnya mudah untuk mendapatkan instance dari MySQL yang berjalan untuk pengguna mac.

Tautan yang baik untuk proses instalasi ulang ini: http://www.coolestguyplanettech.com/how-to-install-php-mysql-apache-on-os-x-10-6/