Download
docker pull mysql/mysql-server:latest
Create
Option 1 – docker run
docker run -d \
--name mysql-itsmetommy \
-p 3306:3306 \
--env="MYSQL_ROOT_PASSWORD=password" \
mysql/mysql-server:latest
Option 2 – docker-compose
cat <<EOF > docker-compose.yml
version: '3.8'
services:
db:
image: mysql:latest
restart: always
environment:
MYSQL_DATABASE: 'db'
# Optional user account
MYSQL_USER: 'tommy'
# Password for optional user account
MYSQL_PASSWORD: 'password'
# Password for root user
MYSQL_ROOT_PASSWORD: 'password'
ports:
# <Port exposed> : < MySQL Port running inside container>
- '3306:3306'
expose:
# Opens port 3306 on the container
- '3306'
container_name: mysql-itsmetommy
EOF
Create.
docker-compose up -d
Logs.
docker-compose logs -f
Password
If you didn’t specify a password for root, one was generated for you. You can view the root password by running the following.
docker logs mysql-itsmetommy 2>&1 | grep GENERATED
Test connection
nc -zv localhost 3306
Example
nc -zv localhost 3306
Connection to localhost port 3306 [tcp/mysql] succeeded!
Connect
Option 1 – docker exec
Connect to the pod.
docker exec -it mysql-itsmetommy bash
Then connect to mysql from within the pod.
# mysql -uroot -p
[ENTER_ROOT_PASSWORD]
Example
docker exec -it mysql-itsmetommy bash
bash-4.4# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.26
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
Option 2 – mysql Client
You can install mysql client using the following methods.
# Mac
brew install mysql
# CentOS
yum install mysql
# Ubuntu
apt-get install mysql-client
Connect.
mysql -uroot -ppassword -h127.0.0.1 -P3306
Setup
Warning: If you created your container using docker run, you may run into the following issue.
mysql> CREATE DATABASE guestbook;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
To fix this, you need to change your MySQL root password by running.
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';
Create database
In this case, I will create a database called guestbook.
mysql> CREATE DATABASE guestbook;
Create user
If not already created, create a user.
CREATE USER tommy WITH PASSWORD '12345';
mysql> CREATE USER 'tommy'@'localhost' IDENTIFIED BY 'password';
Give user permissions
Option 1 – Give access to all databases
mysql> GRANT ALL PRIVILEGES ON * . * TO 'tommy'@'localhost';
Option 2 – Give access to a specific database
mysql> GRANT ALL PRIVILEGES ON guestbook.* TO 'tommy'@'localhost';
Reload all the privileges to apply permissions.
mysql> FLUSH PRIVILEGES;
Create table
Switch the database.
mysql> use guestbook;
Create table.
mysql> CREATE TABLE users (
userid SERIAL PRIMARY KEY,
name TEXT,
age INT,
location TEXT
);
Verify
mysql> show tables;
mysql> describe users;
Example
mysql> show tables;
+---------------------+
| Tables_in_guestbook |
+---------------------+
| users |
+---------------------+
1 row in set (0.00 sec)
mysql> describe users;
+----------+-----------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-----------------+------+-----+---------+----------------+
| userid | bigint unsigned | NO | PRI | NULL | auto_increment |
| name | text | YES | | NULL | |
| age | int | YES | | NULL | |
| location | text | YES | | NULL | |
+----------+-----------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
Clean up
Option 1 – If you used docker run
docker stop mysql-itsmetommy && docker rm mysql-itsmetommy
Option 2 – If you used docker-compose
docker-compose down