Docker中安装数据库,建议日常开发使用,不建议生产使用。

1、Linux中安装Docker

1、如何安装docker呢

centos操作系统要采取yum install docker。。。。。

debian操作系统要采取apt install docker。。。。。

以上这种方式太麻烦,有甚者还要卸载掉以前老版本,有没有一键安装的操作方式呢,当然有的请参考:https://www.runoob.com/docker/ubuntu-docker-install.html

2、一键安装docker

1
2
3
4
5
6
7
使用官方安装脚本自动安装
安装命令如下:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
也可以使用国内 daocloud 一键安装命令:

curl -sSL https://get.daocloud.io/docker | sh

2、安装MySQL8.0并开启主从复制

1、创建主服务器所需目录

1
2
mkdir -p /usr/local/mysql8.0/master/cnf
mkdir -p /usr/local/mysql8.0/master/data

2、定义主服务器配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
vi /usr/local/mysql8.0/master/cnf/mysql.cnf

[mysqld]
## 设置server_id,注意要唯一
server-id=1
## 开启binlog
log-bin=mysql-bin
## binlog缓存
binlog_cache_size=1M
## binlog格式(mixed、statement、row,默认格式是statement)
binlog_format=mixed
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

3、创建并启动mySql主服务

1
docker run -itd -p 3306:3306 --name master -v /usr/local/mysql8.0/master/cnf:/etc/mysql/conf.d -v /usr/local/mysql8.0/master/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0

4、添加复制master数据的用户reader,供从服务器使用

1
2
3
4
5
6
7
8
9
10
11
[root@syfz /]# docker exec -it master /bin/bash
root@41d795785db1:/# mysql -u root -p123456

mysql> create user reader@'%' identified by 'reader';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON *.* TO 'reader'@'%'WITH GRANT OPTION;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

5、创建从服务器所需目录,编辑配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
mkdir /usr/local/mysql8.0/slave/cnf -p
mkdir /usr/local/mysql8.0/slave/cnf -p
vi /usr/local/mysql8.0/slave/cnf/mysql.cnf


[mysqld]
## 设置server_id,注意要唯一
server-id=2
## 开启binlog,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
## 如果需要同步函数或者存储过程
log_bin_trust_function_creators=true
## binlog缓存
binlog_cache_size=1M
## binlog格式(mixed、statement、row,默认格式是statement)
binlog_format=mixed
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

6、创建并运行mysql从服务器

1
docker run -itd -p 3307:3306 --name slaver -v /usr/local/mysql8.0/slave/cnf:/etc/mysql/conf.d -v /usr/local/mysql8.0/slave/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0

7、在从服务器上配置连接主服务器的信息

首先主服务器上查看master_log_file、master_log_pos两个参数,然后切换到从服务器上进行主服务器的连接信息的设置主服务上执行:

1
2
3
4
5
6
7
8
9
root@6af1df686fff:/# mysql -u root -p123456

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000005 | 154 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

8、docker查看主服务器容器的ip地址

1
2
[root@syfz /]# docker inspect --format='{{.NetworkSettings.IPAddress}}' master
172.17.0.2

9、开启主从复制配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
[root@syfz /]# docker exec -it slaver /bin/bash
root@fe8b6fc2f1ca:/# mysql -u root -p123456

mysql> change master to master_host='172.17.0.2',master_user='reader',master_password='reader',master_log_file='mysql-bin.000005',master_log_pos=154;

mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 172.17.0.2
Master_User: reader
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000005
Read_Master_Log_Pos: 154
Relay_Log_File: edu-mysql-relay-bin.000002
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000005
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: 154
Relay_Log_Space: 531
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: 54a1f8d6-5056-11ed-8870-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)

Slave_IO_Running: Yes,Slave_SQL_Running: Yes 即表示启动成功

3、测试&验证

1
2
3
4
5
6
7
8
9
CREATE TABLE `user` (
`id` varchar(255) NOT NULL COMMENT 'id',
`name` varchar(255) DEFAULT NULL COMMENT '用户名',
`password` varchar(255) DEFAULT NULL COMMENT '密码',
`mobile` varchar(40) DEFAULT NULL COMMENT '手机号码',
`email` varchar(100) DEFAULT NULL COMMENT '邮箱',
`sex` int(1) DEFAULT NULL COMMENT '性别(0:男,1:女)',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8 COMMENT='用户表'

主从库查询下,表已经同步成功,OVER