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=1 # log-bin=mysql-bin # binlog_cache_size=1M # 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=2 # log-bin=mysql-slave-bin # relay_log=edu-mysql-relay-bin # log_bin_trust_function_creators=true # binlog_cache_size=1M # binlog_format=mixed # # 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