docker安装mysql8实战

前置条件,如果宿主机开了iptable,要先开放3306端口
vi /etc/sysconfig/iptables
在iptables中开放3306端口
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
重启iptables服务
service iptables restart
重启docker
systemctl restart docker

开始mysql安装
1、拉取mysql 8.0.27版本的镜像
docker pull mysql:8.0.27
2、创建数据目录和配置文件
mkdir -p /mysoft/mysql/ywzx/3306/conf /mysoft/mysql/ywzx/3306/data /mysoft/mysql/ywzx/3306/mysql-files
chmod -R 755 /mysoft/mysql/
3、在/mysoft/mysql/ywzx/3306/conf下创建自定义的配置文件my.cnf

my.cnf的内容如下:

[client] #客户端连接配置
#设置客户端编码
default-character-set = utf8mb4

[mysqld] #服务端配置
# ---------------- 基础配置 ----------------
#设置服务端编码,utf8mb4是utf8的超集,支持特殊文字,且一个字符最大可占4个字节存储空间,现在mysql基本是用这个编码集
character_set_server = utf8mb4
collation_server = utf8mb4_bin
#默认存储引擎,其特点是行锁设计、支持MVCC、支持外键、提供一致性非锁定读、同时被设计用来最有效的利用以及使用内存和CPU
default-storage-engine = InnoDB
#表名不区分大小写
lower_case_table_names = 1

# ---------------- 连接数、处理文件数配置,用于优化连接 ----------------
# 服务器关闭交互式连接前等待活动的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端。默认值:28800秒(8小时)
interactive_timeout = 1800
# 服务器关闭非交互连接之前等待活动的秒数。在线程启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,默认值:28800秒(8小时)
wait_timeout = 1800
#MySQL的最大连接数,如果请求量比较大,建议调高此值增加并行连接数量,开销越多的内存,16G内存推进配置800到1000。
max_connections = 1024
#对于同一主机,如果有超出该参数值个数的中断错误连接,则该主机将被禁止连接。如需对该主机进行解禁,执行:FLUSH HOST。一般设置max_connections的10倍
max_connect_errors = 10240
#以等待某一连接释放资源,该堆栈的数量即back_log,如果等待连接的数量超过back_log,将不被授予连接资源。
back_log = 600
#打开的文件描述符限制,默认最小1024;当open_file_limit被配置的时候,比较open_files_limit和max_connections*5的值,哪个大用哪个。
open_files_limit = 10240
#每打开一个表,会读入一些数据到table_open_cache缓存中,缓存中找不到相应信息时,会去磁盘上读取。默认值64。很大时,系统处理不了,会出现客户端失效,连接不上
table_open_cache = 1024


4、启动创建容器
docker run --restart=unless-stopped -d --name mysql_ys_ywzx -v /mysoft/mysql/ywzx/3306/conf/my.cnf:/etc/mysql/my.cnf -v /mysoft/mysql/ywzx/3306/data:/var/lib/mysql -v /mysoft/mysql/ywzx/3306/mysql-files:/var/lib/mysql-files/ -v /etc/localtime:/etc/localtime:ro -p 3306:3306 -e MYSQL_ROOT_PASSWORD=自定义密码 mysql:8.0.27
5、查看容器创建的情况
docker ps -a
6、进入容器内部
docker exec -it mysql_ys_ywzx /bin/bash
7、连接 mysql
mysql -uroot -p自定义密码
8、使用mysql库
use mysql
9、修改访问主机以及密码等,设置为所有主机可访问
#修改加密规则
ALTER USER 'root'@'localhost' IDENTIFIED BY '自定义密码' PASSWORD EXPIRE NEVER;
修改加密方式
alter user 'root'@'localhost' identified with mysql_native_password by '自定义密码';
给用户赋予远程登录权限
update user set Host = '%' where User = 'root';
修改加密方式不一样,再次重新设置密码
alter user 'root'@'%' identified with mysql_native_password by '自定义密码';
刷新权限
flush privileges;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 安装Docker 如果您还没有安装Docker,请按照官方文档的说明安装Docker。 2. 创建Docker网络 为了使主从复制工作,我们需要为Docker容器创建一个网络。在命令行中运行以下命令: ``` sudo docker network create mysql_network ``` 3. 启动主数据库 我们将使用官方的MySQL Docker镜像来启动主数据库。在命令行中运行以下命令: ``` sudo docker run -d --name mysql_master --net mysql_network -e MYSQL_ROOT_PASSWORD=password mysql:latest --server-id=1 --log-bin=mysql-bin --binlog-do-db=mydb ``` 这将启动一个名为mysql_master的Docker容器,并将其连接到我们创建的mysql_network网络中。我们还指定了一个root用户的密码,并为该容器分配了一个server-id,以便在创建从数据库时使用。 我们还使用了两个MySQL选项来启用二进制日志记录和仅记录mydb数据库的事务。 4. 启动从数据库 现在我们需要启动另一个MySQL容器作为从数据库。在命令行中运行以下命令: ``` sudo docker run -d --name mysql_slave --net mysql_network -e MYSQL_ROOT_PASSWORD=password mysql:latest --server-id=2 --log-bin=mysql-bin --binlog-do-db=mydb --relay-log=mysql-relay-bin --log-slave-updates=1 --read-only=1 --slave-skip-errors=all --skip-slave-start ``` 这将启动一个名为mysql_slave的Docker容器,并将其连接到我们创建的mysql_network网络中。我们还指定了一个root用户的密码,并为该容器分配了一个server-id。 我们还使用了一些MySQL选项来启用二进制日志记录和仅记录mydb数据库的事务。我们还启用了中继日志记录和从服务器更新主服务器的日志记录。我们还将容器设置为只读模式,并跳过任何从数据库错误。最后,我们将跳过从服务器的启动。 5. 配置主数据库 现在我们需要登录主数据库并为它创建一个用于从服务器的用户。在命令行中运行以下命令: ``` sudo docker exec -it mysql_master mysql -u root -p ``` 输入我们在启动容器时指定的root密码,这将进入MySQL shell。在MySQL shell中,运行以下命令: ``` GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'password'; FLUSH PRIVILEGES; SHOW MASTER STATUS; ``` 这将创建一个名为slave_user的用户并授予其复制权限。我们还刷新了特权表以确保更改生效。最后,我们显示了主服务器的状态,以便稍后配置从服务器。 请注意,我们在第一行中使用了“%”通配符,以便从任何位置连接到主服务器。在生产环境中,您应该更明确地指定从服务器的IP地址。 6. 配置从数据库 现在我们需要登录从数据库并配置它以连接到主服务器。在命令行中运行以下命令: ``` sudo docker exec -it mysql_slave mysql -u root -p ``` 输入我们在启动容器时指定的root密码,这将进入MySQL shell。在MySQL shell中,运行以下命令: ``` CHANGE MASTER TO MASTER_HOST='mysql_master', MASTER_USER='slave_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=0; START SLAVE; ``` 这将配置从服务器以连接到我们的主数据库,并指定将从哪个二进制日志文件开始复制。我们还启动从服务器以开始复制。 请注意,我们在第一行中使用了主服务器的容器名称(mysql_master)作为主机名。在Docker网络中,容器可以使用其名称进行通信。 7. 测试主从复制 现在,我们已经成功配置了主从复制,我们可以测试它是否正常工作。在MySQL shell中,运行以下命令: ``` USE mydb; CREATE TABLE test (id INT PRIMARY KEY); INSERT INTO test VALUES (1); ``` 这将在主服务器上创建一个名为test的表,并将一行插入其中。我们可以使用以下命令在从服务器上检查是否成功复制: ``` USE mydb; SELECT * FROM test; ``` 如果一切正常,您应该看到与主服务器上插入的相同的行。 现在,我们已经成功地使用Docker部署了MySQL主从复制。请记住,这只是一个简单的示例,用于演示如何设置主从复制。在生产环境中,您应该仔细考虑安全性和高可用性等问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值