2

I created a Dockerfile to build a custom MySQL image. Using it I can run MySQL on my localhost Ubuntu 16.04 laptop. But not on my DigitalOcean Ubuntu 16.04 droplet. On this remote system, I cannot start MySQL.

For debug purposes, the image is not itself starting MySQL, but only keeping the container alive:

FROM ubuntu:16.04

RUN apt-get update \
  && apt-get install -y libncurses-dev \
  && apt-get install -y build-essential \
  && apt-get install -y cmake

COPY mysql-5.6.30.tar.gz /usr/bin/
WORKDIR /usr/bin/
RUN gzip -d mysql-5.6.30.tar.gz \
  && tar -xvf mysql-5.6.30.tar \
  && ln -s mysql-5.6.30 mysql

WORKDIR /usr/bin/mysql/
RUN mkdir install && mkdir install/data && mkdir install/var && mkdir install/etc && mkdir install/tmp

RUN cd /usr/bin/mysql/ \
  && cmake \
  -DCMAKE_INSTALL_PREFIX=/usr/bin/mysql/install \
  -DWITH_INNOBASE_STORAGE_ENGINE=1 \
  -DMYSQL_DATADIR=/usr/bin/mysql/install/data \
  -DDOWNLOAD_BOOST=1 \
  -DWITH_BOOST=/usr/bin/mysql/install/boost \
  -DMYSQL_UNIX_ADDR=/usr/bin/mysql/install/tmp/mysql.sock \
  && make \
  && make install \
  && make clean

COPY my.cnf install/my.cnf
RUN ln -s /usr/bin/mysql/install/my.cnf ~/.my.cnf

ENTRYPOINT ["/usr/bin/tail", "-f", "/dev/null"]

On the remote system I type in the commands:

cd ~/dev/docker/projects/learnintouch
sudo rm -fr mysql/data/
sudo docker run -d -p 3307:3306 -v /home/stephane/dev/docker/projects/learnintouch/mysql/data:/usr/bin/mysql/install/data --name mysql thalasoft.com:5000/mysql:5.6.30
sudo docker exec -it mysql bash

Then, in the running container, I type in the command:

root@4d0028607aeb:/usr/bin/mysql-5.6.30# /usr/bin/mysql/install/scripts/mysql_install_db \
  --no-defaults \
  --explicit_defaults_for_timestamp \
  --basedir=/usr/bin/mysql/install \
  --datadir=/usr/bin/mysql/install/data \
  --tmpdir=/usr/bin/mysql/install/tmp \
  --lc-messages-dir=/usr/bin/mysql/install/share
Installing MySQL system tables...2017-10-25 10:22:26 0 [Note] /usr/bin/mysql/install/bin/mysqld (mysqld 5.6.30) starting as process 28 ...
2017-10-25 10:22:26 28 [Note] InnoDB: Using atomics to ref count buffer pool pages
2017-10-25 10:22:26 28 [Note] InnoDB: The InnoDB memory heap is disabled
2017-10-25 10:22:26 28 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2017-10-25 10:22:26 28 [Note] InnoDB: Memory barrier is not used
2017-10-25 10:22:26 28 [Note] InnoDB: Compressed tables use zlib 1.2.3
2017-10-25 10:22:26 28 [Note] InnoDB: Using CPU crc32 instructions
2017-10-25 10:22:26 28 [Note] InnoDB: Initializing buffer pool, size = 128.0M
2017-10-25 10:22:26 28 [Note] InnoDB: Completed initialization of buffer pool
2017-10-25 10:22:26 28 [Note] InnoDB: The first specified data file ./ibdata1 did not exist: a new database to be created!
2017-10-25 10:22:26 28 [Note] InnoDB: Setting file ./ibdata1 size to 12 MB
2017-10-25 10:22:26 28 [Note] InnoDB: Database physically writes the file full: wait...
2017-10-25 10:22:26 28 [Note] InnoDB: Setting log file ./ib_logfile101 size to 48 MB
2017-10-25 10:22:26 28 [Note] InnoDB: Setting log file ./ib_logfile1 size to 48 MB
2017-10-25 10:22:26 28 [Note] InnoDB: Renaming log file ./ib_logfile101 to ./ib_logfile0
2017-10-25 10:22:26 28 [Warning] InnoDB: New log files created, LSN=45781
2017-10-25 10:22:26 28 [Note] InnoDB: Doublewrite buffer not found: creating new
2017-10-25 10:22:26 28 [Note] InnoDB: Doublewrite buffer created
2017-10-25 10:22:26 28 [Note] InnoDB: 128 rollback segment(s) are active.
2017-10-25 10:22:26 28 [Warning] InnoDB: Creating foreign key constraint system tables.
2017-10-25 10:22:26 28 [Note] InnoDB: Foreign key constraint system tables created
2017-10-25 10:22:26 28 [Note] InnoDB: Creating tablespace and datafile system tables.
2017-10-25 10:22:26 28 [Note] InnoDB: Tablespace and datafile system tables created.
2017-10-25 10:22:26 28 [Note] InnoDB: Waiting for purge to start
2017-10-25 10:22:26 28 [Note] InnoDB: 5.6.30 started; log sequence number 0
2017-10-25 10:22:26 28 [Note] Binlog end
2017-10-25 10:22:26 28 [Note] InnoDB: FTS optimize thread exiting.
2017-10-25 10:22:26 28 [Note] InnoDB: Starting shutdown...
2017-10-25 10:22:28 28 [Note] InnoDB: Shutdown completed; log sequence number 1625977
OK

Filling help tables...2017-10-25 10:22:28 0 [Note] /usr/bin/mysql/install/bin/mysqld (mysqld 5.6.30) starting as process 51 ...
2017-10-25 10:22:28 51 [Note] InnoDB: Using atomics to ref count buffer pool pages
2017-10-25 10:22:28 51 [Note] InnoDB: The InnoDB memory heap is disabled
2017-10-25 10:22:28 51 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2017-10-25 10:22:28 51 [Note] InnoDB: Memory barrier is not used
2017-10-25 10:22:28 51 [Note] InnoDB: Compressed tables use zlib 1.2.3
2017-10-25 10:22:28 51 [Note] InnoDB: Using CPU crc32 instructions
2017-10-25 10:22:28 51 [Note] InnoDB: Initializing buffer pool, size = 128.0M
2017-10-25 10:22:28 51 [Note] InnoDB: Completed initialization of buffer pool
2017-10-25 10:22:28 51 [Note] InnoDB: Highest supported file format is Barracuda.
2017-10-25 10:22:28 51 [Note] InnoDB: 128 rollback segment(s) are active.
2017-10-25 10:22:28 51 [Note] InnoDB: Waiting for purge to start
2017-10-25 10:22:28 51 [Note] InnoDB: 5.6.30 started; log sequence number 1625977
2017-10-25 10:22:28 51 [Note] Binlog end
2017-10-25 10:22:28 51 [Note] InnoDB: FTS optimize thread exiting.
2017-10-25 10:22:28 51 [Note] InnoDB: Starting shutdown...
2017-10-25 10:22:29 51 [Note] InnoDB: Shutdown completed; log sequence number 1625987
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:

  /usr/bin/mysql/install/bin/mysqladmin -u root password 'new-password'
  /usr/bin/mysql/install/bin/mysqladmin -u root -h 4d0028607aeb password 'new-password'

Alternatively you can run:

  /usr/bin/mysql/install/bin/mysql_secure_installation

which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.

See the manual for more instructions.

You can start the MySQL daemon with:

  cd . ; /usr/bin/mysql/install/bin/mysqld_safe &

You can test the MySQL daemon with mysql-test-run.pl

  cd mysql-test ; perl mysql-test-run.pl

Please report any problems at http://bugs.mysql.com/

The latest information about MySQL is available on the web at

  http://www.mysql.com

Support MySQL by buying support/licenses at http://shop.mysql.com

WARNING: Found existing config file /usr/bin/mysql/install/my.cnf on the system.
Because this file might be in use, it was not replaced,
but was used in bootstrap (unless you used --defaults-file)
and when you later start the server.
The new default config file was created as /usr/bin/mysql/install/my-new.cnf,
please compare it with your file and take the changes you need.

When starting MySQL the following output is displayed:

root@4d0028607aeb:/usr/bin/mysql-5.6.30# /usr/bin/mysql/install/bin/mysqld_safe --defaults-file=/usr/bin/mysql/install/my.cnf
171025 10:37:32 mysqld_safe Logging to '/usr/bin/mysql/install/mysql.error.log'.
171025 10:37:32 mysqld_safe Starting mysqld daemon with databases from /usr/bin/mysql/install/data
171025 10:37:32 mysqld_safe mysqld from pid file /usr/bin/mysql/install/data/4d0028607aeb.pid ended

root@4d0028607aeb:/usr/bin/mysql-5.6.30# /usr/bin/mysql/install/bin/mysqld_safe  
171025 10:23:33 mysqld_safe Logging to '/usr/bin/mysql/install/mysql.error.log'.
171025 10:23:33 mysqld_safe Starting mysqld daemon with databases from /usr/bin/mysql/install/data
171025 10:23:34 mysqld_safe mysqld from pid file /usr/bin/mysql/install/data/4d0028607aeb.pid ended

And the log is not saying much:

root@4d0028607aeb:/usr/bin/mysql-5.6.30# cat /usr/bin/mysql/install/mysql.error.log
171025 10:23:33 mysqld_safe Starting mysqld daemon with databases from /usr/bin/mysql/install/data
Killed
171025 10:23:34 mysqld_safe mysqld from pid file /usr/bin/mysql/install/data/4d0028607aeb.pid ended
171025 10:37:32 mysqld_safe Starting mysqld daemon with databases from /usr/bin/mysql/install/data
Killed
171025 10:37:32 mysqld_safe mysqld from pid file /usr/bin/mysql/install/data/4d0028607aeb.pid ended

The my.cnf file contains:

root@4d0028607aeb:/usr/bin/mysql-5.6.30# cat /usr/bin/mysql/install/my.cnf 
[mysqld]
bind-address    = 0.0.0.0 # Allow client binding from any IP address instead of just 127.0.0.1
port            = 3306
sql_mode        = NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION # This is strict mode: NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
socket          = /usr/bin/mysql/install/tmp/mysql.sock
user            = root
basedir         = /usr/bin/mysql/install
datadir         = /usr/bin/mysql/install/data
log-bin         = /usr/bin/mysql/install/mysql.bin.log
log-error       = /usr/bin/mysql/install/mysql.error.log
general-log-file     = /usr/bin/mysql/install/mysql.log
slow-query-log-file  = /usr/bin/mysql/install/mysql.slow.queries.log
innodb_file_per_table = 1
innodb_flush_log_at_trx_commit = 1
sync_binlog = 1
innodb_flush_method = O_DIRECT
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init-connect = 'SET NAMES utf8mb4'
character-set-client-handshake = FALSE
wait_timeout = 28800 # amount of seconds during inactivity that MySQL will wait before it will close a connection on a non-interactive connection
interactive_timeout = 28800 # same, but for interactive sessions
[client]
socket = /usr/bin/mysql/install/tmp/mysql.sock
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4

There is a link to it:

root@4d0028607aeb:/usr/bin/mysql-5.6.30# cd
root@4d0028607aeb:~# ll
total 16
drwx------  2 root root 4096 Oct 25 08:06 ./
drwxr-xr-x 50 root root 4096 Oct 25 10:21 ../
-rw-r--r--  1 root root 3106 Oct 22  2015 .bashrc
lrwxrwxrwx  1 root root   29 Oct 25 08:06 .my.cnf -> /usr/bin/mysql/install/my.cnf
-rw-r--r--  1 root root  148 Aug 17  2015 .profile

So that it can be found:

root@4d0028607aeb:~# /usr/bin/mysql/install/bin/mysqladmin | grep my.cnf                                 
                      order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf /usr/bin/mysql/install/etc/my.cnf ~/.my.cnf 

The host directories accessed from within the container:

stephane@ubuntu-512mb-fra1-01:~/dev/docker/projects/learnintouch$ ll
total 24K
drwxr-xr-x 8 stephane 4.0K Oct 24 16:52 engine/
drwxrwxr-x 2 stephane 4.0K Oct 24 16:22 learnintouch/
drwxrwxr-x 2 stephane 4.0K Oct 24 16:22 learnintouch.com/
drwxrwxr-x 2 stephane 4.0K Oct 24 13:11 learnintouch.com-startup/
drwxrwxrwx 3 stephane 4.0K Oct 25 10:20 mysql/
drwxr-xr-x 3 root     4.0K Oct 24 16:36 website/
stephane@ubuntu-512mb-fra1-01:~/dev/docker/projects/learnintouch$ ll mysql/
total 4.0K
drwxr-xr-x 5 root 4.0K Oct 25 10:22 data/
stephane@ubuntu-512mb-fra1-01:~/dev/docker/projects/learnintouch$ ll mysql/data/
total 109M
-rw-rw---- 1 root  12M Oct 25 10:22 ibdata1
-rw-rw---- 1 root  48M Oct 25 10:22 ib_logfile0
-rw-rw---- 1 root  48M Oct 25 10:22 ib_logfile1
drwx------ 2 root 4.0K Oct 25 10:22 mysql/
drwx------ 2 root 4.0K Oct 25 10:22 performance_schema/
drwx------ 2 root 4.0K Oct 25 10:22 test/
-rw-r--r-- 1 root    0 Oct 25 10:21 created-from-within-the-container

I also added a swap file of 2G and tried again, but it still fails to start in the same fashion.

  • What should actually show that it isn't running? – Seth Oct 26 '17 at 12:43
  • For example, that I cannot connect with the MySQL client. And that there is no MySQL process. And that one can see in the log above the Shutdown completed message. – Stephane Oct 26 '17 at 13:19
  • Stupid me! This shutdown is normal. It is the post installation after all. – Stephane Oct 26 '17 at 13:22
  • 1
    Yes. After starting the server with the command /usr/bin/mysql/install/bin/mysqld_safe --defaults-file=/usr/bin/mysql/install/my.cnfI could then connect using the client bin/mysql -u root -p. I guess the adding of the swap file is what allowed me to start the server. – Stephane Oct 26 '17 at 13:23

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.