setting up mysql on Mac - python

I first installed Macports so it would be easier. Then installed mysql5,mysql5-server and py26-mysql.
Everything went ok. When I typed: which mysql5 it returns `/opt/local/bin/mysql5
But when i try to enter the server: mysql5, an error is generated:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/opt/local/var/run/mysql5/mysqld.sock' (2)
How do I fix it?
I eventually wish to use mysql as a backend to a django project.
`

You need to start the server. You should be able to run:
sudo /opt/local/share/mysql5/mysql/mysql.server start
You can set it to run on boot with:
sudo launchctl load -w /Library/LaunchDaemons/org.macports.mysql5.plist
There is a useful guide with other details.

Make sure mysqld (mysql daemon) is actually running on your Mac.
Remember: MySQL is a SQLServer, so it needs a daemon, probably listening on some TCP port to process client's requests.
To check if MySQL daemon is running, type into a terminal session:
$ ps aux | grep mysql
And mysql daemon process should be printed.
If it is not running, start it as stated by Mac Ports documentation.

Another solution:
Find out where MySQL is actually using its sock by reviewing your my.cnf file and looking for
socket=<your mysql sock file>
Make sure this where your app, or whatever is using.
You are going to run into this problem when you hook up to Django. MySQLdb expects /tmp/mysql.sock. You need to override this in your settings.py file by setting:
SOCK: '<your actual sock file'>

There is a quick and easy tutorial at https://kidcodely.wordpress.com/2017/10/07/database-setup/
This will take you through the full installation on a mac where you'll learn how to create databases from Terminal.

Related

jupyter-notebook eith oracle connection problem

I have a problem that I've been trying to solve for a very long time and it seems like I'm missing something very basic.
I use a Linux server with Anaconda, Oracle client, Pycharm and jupyter-notebook installed.
I use python scripts in which I write and read data to Oracle DB, and I use the Cx_oracle extension.
The server has several users with a personal username for each and each of them has sudo privileges.
I performed all the installations on the server with sudo privileges.
When I try to connect from the server to Oracle DB I connect properly.
When I connect to Python on the server itself, I connect properly to Oracle DB.
When I connect using Pycharm and I define ORACLE_HOME=/OracleTools/19.0.0/ in the environment variables, I connect properly to the Oracle DB.
My problem starts when I want to use jupyter-notebook
When I try to connect to the DB I get the error -
DatabaseError: Error while trying to retrieve text for error ORA-12715
I noticed when I execute os.environ I see that it is defined for me:
ORACLE_HOME: /OracleTools/19.0.0/bin
and should be
/OracleTools/19.0.0
So I changed using command os.environ['ORACLE_HOME'] = '/OracleTools/19.0.0'
Then I get an error:
DatabaseError: ORA-12715: invalid character set specified
And of course this change is not permanently saved ...
If on the server itself I execute the env command both in the private user and in sudo I see ORACLE_HOME: /OracleTools/19.0.0 and not ORACLE_HOME: /OracleTools/19.0.0/bin
My questions:
Where does the data I get in the os.environ command come from?
How can I edit them permanently ?
Is this even the problem I'm having or should I check something else?
I manage to import cx_oracle, which means that there is no problem of expansion
Thanks!

Ubuntu MYSQL cannot connect from python script

I need to create a mysql DB for my project. I have a ubuntu server and have followed this guide to install required modules:
https://www.javahelps.com/2018/10/install-mysql-with-phpmyadmin-on-ubuntu.html
After installing everything I can reach the phpmyadmin using the browser 192.168.3.146/phpmyadmin works without any issues:
phpmyadmin home screen
But the problem is when I try to reach the database through the python code, it does not work. My program hangs after mysql.connector.connect and will never print the next print statement.
print("trying MYSQL")
myConnection = mysql.connector.connect(host=192.168.3.146, user='test_user', passwd='test_user123', db='test', autocommit=True)
print("Connection ID:", myConnection)
print(myConnection)
I have previously sucesfully connected to the mysql this way to the mysql server which was created on Raspbian and did not have any issues. It seems that UBUNTU is not as straightforward.
Please can someone suggest me what could be the problem if I can easily reach the database through the web browser but python program fails
UPDATE
Trying out to comment out bind address in the configuration file but still no luck. The configuration file:
enter image description here
I have allowed firewall through port 3306 with the following command:
sudo ufw allow 3306
There is some progress. Now my Python program does not hang on the mysql connection but instead gives me error:
ERROR 1130 (HY000): Host '192.168.3.251' is not allowed to connect to this MySQL server
First of all, I am unsure where does this IP come from 192.168.3.251. The machine am using to connect to the database is configured with static IP and it is 192.168.4.200. I do not know why it says 192.168.3.251
Is the python script running from another machine? If so, maybe the problem is that mysql is listening only in localhost interface. You can change this by editing the file mysqld.cnf located in the /etc/mysql/mysql.conf.d/ folder and comment (with an #) the line that says:
bind-address = 127.0.0.1.
Once you've done this, restart the service this way:
$ sudo systemctl restart mysql.service
And, verify that everything is ok with:
$ systemctl status mysql.service

server program exits when i close SSH connection to GCP

I have an Ubuntu instance on Google Cloud Platform (GCP). I want to use it as an HTTP server to access files. I simply use this python command, type it in bash:
python3 -m http.server 8000
This will run http.server module as a script, construct a simple HTTP server and listen at port 8000.
Problem is that, since I use GCP instance, I must connect to it remotely (for example I use SSH shell provided by GCP). When I close the SSH shell, the python HTTP server will stop. So what should I do to make sure that the server still runs after I close the shell?
I did searched on Google, and I tried to use
nohup python3 -m http.server 8000 &
This command, I quote, will run the instruction as a background program and persist running after exiting bash. But it seems that this doesn't work for my situation.
Anybody can help?
Try the screen command. I think it's easier to use and also more flexible than nohup as you can also reattach processes after detaching then. See this answer for details.
The http.server module is not meant to be a full-fledged webserver.
You'll want to set up something like Apache instead, see Running a basic Apache web server.

Python process suspends on SSH logout after nohup/screen

I have a remote server through Blue Host that's intended to run a server based on Twisted for Python. The only access I have to it is over SSH, so to keep Python running after I log out I tried using nohup python server.py & and screen -dm python server.py, getting the same results for each. Everything works fine until I log out of SSH - even though Python is running in the background as expected, once I've logged out, my client can no longer communicate with the server. The strange part is that if I log back in over SSH and check the running processes with ps aux, I see Python running and my client can successfully communicate with the server again. Even if I don't type anything at all once I log back in, everything works as expected. But, of course, as soon as I log back out, it's as if the server is gone.
I've contacted support for the hosting service in case this is some oddity on their end, but hopefully this is something that can be resolved on my end instead.
Edit: Looks like Blue Host doesn't want me doing server-y stuff without buying the VPS upgrade so it looks like that's the big problem.
Edit 2: Okay, so in case anybody ends up having a similar problem, here's what the main issue turned out to be. I was mistaken in my original description; I was able to connect to the server but I was getting kicked off immediately for what turned out to be a MySQL error. I guess trying to connect to a localhost database with no active connection somehow causes problems, so instead I changed the MySQL connection command to connect to my site's IP address instead, even though it was the same IP as the server. That seemed to do the trick in terms of my main issue.
Don't use this method to keep the server process running. Instead try using supervisor (apt-get install supervisor). It allows you to daemonize your process, and ability to stop/restart etc.
Here's a sample config entry (/etc/supervisor/supervisord.conf):
[program:my_server]
command=python /path/to/server/server.py
directory=/path/to/server/
autostart=true
autorestart=true
stdout_logfile=/var/log/server.log
stderr_logfile=/var/log/server_error.log
user=your_linux_user_name
After you edit your config, do
sudo service supervisor stop
sudo service supervisor start #need to do this - doing a `restart` doesn't reload the config file!
your server should now be running properly. You can manage its lifecycle via sudo supervisorctl

Running django on 0.0.0.0:8000

I am using vagrant along with Virtualbox, so I can't runserver on the default port and address or it won't work.
Django says:
(...) to listen on all public IPs (useful if you want to show off your work on
other computers), use:
python manage.py runserver 0.0.0.0:8000
Then I tried to access the server via http://127.0.0.1:8888/ but it says Unable to connect. Any guess how to run the server correctly?
I have followed the gettingstartedwithdjango vidoes and this http://127.0.0.1:8888/ worked for the author.
For people who are just looking where to configure the IP, it is run like so (as seen in the OP) -
python manage.py runserver 0.0.0.0:8000
If you are accessing it over your local network you will also need to update settings.py with the IP of your host, as well as specifying localhost. Your local IP can be gotten on Windows by running ipconfig in the command prompt, or ip addr show in the terminal on Ubuntu.
ALLOWED_HOSTS = ['192.168.1.XXX', 'localhost']
You have to run with root privileges. If you run with sudoyou will succeed.
UPDATE 1
The previous information is irrelevant with the topic.
In vagrant you have to forward your port to a local port. Please have a look at this.
UPDATE 2
This page explained how to install and configure django in a vagrant box.

Categories

Resources