centos 6 docker mysql(master slave) wordpress - 2877206/docs GitHub Wiki
centos6
https://www.liquidweb.com/kb/how-to-install-docker-on-centos-6/
https://groups.google.com/forum/#!topic/docker-user/kjokcJJs5Jo
rpm -iUvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum update -y
yum -y install docker-io
No package docker-io available.
then:
yum --enablerepo=epel install docker-io
service docker start
docker pull centos
docker search centos
docker run -i -t centos /bin/bash
chkconfig docker on
docker run --name wordpress825-mariadb -e MYSQL_ROOT_PASSWORD= -d mariadb:latest
docker run -it --link wordpress825-mariadb:mysql --rm mariadb sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'
docker run --name local8253-wordpress --link wordpress8253-mariadb:mysql -d wordpress
docker run -e WORDPRESS_DB_PASSWORD= -d --name local8253-wordpress --link wordpress825-mariadb:mysql wordpress
docker inspect wordpress
docker run -e WORDPRESS_DB_PASSWORD= -d --name local8252-wordpress --link wordpress825-mariadb:mysql -p 127.0.0.1:80:80 -v "$PWD/":/var/www/html wordpress
sudo systemctl enable docker.service # Enable the service sudo systemctl start docker # Start the Docker daemon. sudo docker images # Show local images sudo docker run -d -p 80:80 tutum/wordpress "blog" # Run container sudo docker stop "blog" # Stop container sudo docker ps -a # Show container list sudo docker export 7691a814370e > blog.tar # Export container cat blog.tar | sudo docker import - tutum/wordpress blog.tar # Import container
mkdir -p /data/mysql/data
chcon -Rt svirt_sandbox_file_t /data/mysql/data
docker run -v /data/mysql/data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root --name mariadb -d mariadb:latest
MYSQL_ROOT_PASSWORD 是设置root的密码。
然后使用查看,启动成功,并且绑定了端口 3306 可以使用mysql了。
docker ps
docker exec -it mariadb bash
root@XXXX:/# mysql -uroot -proot
MySQL常见复制模式
MySQL的常见复制模式(假设有DB1,DB2,DB3三个MySQL实例):
主从复制 DB1 -> DB2 主主复制 DB1 <- -> DB2 链式复制 DB1 -> DB2 -> DB3 环形复制 DB1 -> DB2 -> DB3 -> DB1 生产环境常见主从复制,这是最稳健的一种方式;为了切换方便也可选择主主模式,但要注意主主复制必须确保在任何时刻只有一个数据库是master写入状态,否则可能导致数据异常。 链式和环形复制在生产环境很少使用,主要的缺点是随着节点的增加整个复制系统的稳健性会下降。
对于各种复制模式,主从复制是基础。本文记录自己使用Docker快速搭建MySQL主从复制环境的过程,用于平时的学习和试验。
主从配置文件
master配置文件/home/mysql/etc/master/master.cnf
[mysqld] server_id = 1
character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci default-storage-engine=INNODB
#Optimize omit
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
log-bin = /var/lib/mysql/binlog log_bin_trust_function_creators=1 binlog_format = ROW expire_logs_days = 99 sync_binlog = 0
slow-query-log=1 slow-query-log-file=/var/log/mysql/slow-queries.log long_query_time = 3 log-queries-not-using-indexes slave配置文件/home/mysql/etc/slave/slave.cnf
[mysqld] server_id = 2
character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci default-storage-engine=INNODB
#Optimize omit
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
log-bin = /var/lib/mysql/binlog log_bin_trust_function_creators=1 binlog_format = ROW expire_logs_days = 99 sync_binlog = 0
relay_log=slave-relay-bin log-slave-updates=1 slave-skip-errors=all
slow-query-log=1 slow-query-log-file=/var/log/mysql/slow-queries.log long_query_time = 3 log-queries-not-using-indexes 启动容器,配置主从复制
创建数据目录:
mkdir -p /home/mysql/data/master mkdir -p /home/mysql/data/slave
MASTER_DIR=/home/mysql/data/master SLAVE_DIR=/home/mysql/data/slave 启动MySQL容器:
docker run --name mysql-master
-v /home/mysql/etc/master:/etc/mysql/conf.d
-v /home/mysql/data/master:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=root
-d
mysql:5.7
docker run --name mysql-slave
-v /home/mysql/etc/slave:/etc/mysql/conf.d
-v /home/mysql/data/slave:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=root
--link mysql-master:master
-d mysql:5.7
Master上创建复制用户:
docker exec -it mysql-master mysql -p
CREATE USER 'repl'@'%' IDENTIFIED BY 'repl'; GRANT REPLICATION SLAVE ON . TO 'repl'@'%'; 查看Master节点 Binlog状态:
show master status\G *************************** 1. row *************************** File: binlog.000008 Position: 595 Binlog_Do_DB: Binlog_Ignore_DB: Executed_Gtid_Set: 1 row in set (0.00 sec) 在Slave节点上配置复制:
docker exec -it mysql-slave mysql -p
CHANGE MASTER TO
MASTER_HOST='master',
MASTER_PORT=3306,
MASTER_USER='repl',
MASTER_PASSWORD='repl',
MASTER_LOG_FILE='binlog.000008',
MASTER_LOG_POS=595;
start slave;
查看Salve状态:
show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: master Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: binlog.000008 Read_Master_Log_Pos: 595 Relay_Log_File: slave-relay-bin.000002 Relay_Log_Pos: 317 Relay_Master_Log_File: binlog.000008 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 595 Relay_Log_Space: 524 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 1 Master_UUID: 7a5a452f-fca9-11e6-be18-0242ac110002 Master_Info_File: /var/lib/mysql/master.info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0 Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version: 1 row in set (0.00 sec)
###docker run --name wordpressdb -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=wordpress -d mysql:5.7 docker run -v /data/mysql/data:/var/lib/mysql -p 3306:3306 --name wordpressdb -e MYSQL_ROOT_PASSWORD=wordpress -e MYSQL_DATABASE=wordpress -d mariadb:latest
docker run --name wordpress -v "$PWD/":/var/www/html php:5.6-apache
docker run -e WORDPRESS_DB_PASSWORD=wordpress -d --name wordpress --link wordpressdb:mysql wordpress
docker run -e WORDPRESS_DB_PASSWORD=wordpress -d --name wordpress --link wordpressdb:mysql wordpress
docker inspect id