docker pull mysql:8.0.20
docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.20
查看是否启动成功:
docker ps -a
docker cp mysql:/etc/mysql /usr/software/docker_dir/mysql8.0.20_1
拷贝容器的 /etc/mysql 目录到宿主机目录 /usr/software/docker_dir/mysql8.0.20_1 。
需要先停止容器,再删除容器
docker stop mysql docker rm mysql
docker run \ -p 3306:3306 \ --name mysql_1 \ --privileged=true \ --restart=always \ -v /usr/software/docker_dir/mysql8.0.20_1/mysql:/etc/mysql \ -v /usr/software/docker_dir/mysql8.0.20_1/logs:/logs \ -v /usr/software/docker_dir/mysql8.0.20_1/data:/var/lib/mysql \ -v /etc/localtime:/etc/localtime \ -e MYSQL_ROOT_PASSWORD=123456 \ -d mysql:8.0.20
命令解释:
挂载分为文件挂载和目录挂载:
1、 文件挂载时,宿主机需要自己提前创建好文件,不然会出问题。自己不创建文件的话 执行完命令后会将它创建成目录
2、挂载目录时可以不自己创建目录,会根据目录的挂载路径将 容器内的目录下的文件夹拷贝过来
3、挂载成功后, 如果修改挂载文件的内容,容器内的文件不会实时更新,需要重启容器。如果修改的是挂载目录下的文件,则会实时更新,所以推荐挂载目录
查看容器是否启动成功:
docker ps
登录守护式容器方式:
docker exec -it mysql_1 bash
mysql -uroot -p
输入密码123456后成功登入mysql服务!
支持,mysql服务构建完成。
注意,此时数据库的配置、数据、日志等信息都挂载在宿主机上,我们可以查看一下:
发现远程连接的时候出错了!因为默认情况下只允许本地连接。
容器内连接到mysql客户端后,首先查看用户和可连接主机信息:
注意,当我用“select user,host from user;”查询的时候发现:
可以看到,root用户对应的host其实是localhost和%。这代表远程应该可以使用root用户连接到本服务才对!
所以下面的sql我们可以先不用执行。
use mysql; update user set host='%' where user='root'; flush privileges;
我们来尝试修改root用户密码。
我们再来执行下面的sql:
select host,user,plugin,authentication_string from mysql.user;
备注:
这里挺奇怪的,root用户对应%的那一条消息的host和user好像乱码了。但是通过对比,我们应该还是可以确定这第一条列出的应当就是root ~ % 。所以,我们还是不需要修改远程登录的。
根据备注第三条plugin非mysql_native_password 则需要修改密码,我们尝试修改root用户密码(相当于还是改成原来的密码):
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
修改成功后我们再来查询:
发现上一次乱码的信息竟然变得正常了。而且此时root % 对应的plugin已经变成了mysql_native_password。
我们再次尝试使用Navicat连接:
可以看到,此时就可以正常连接成功了!!!
修改my.cnf配置文件,打开binlog日志,以及指定severId。
[mysqld] server-id=47 #开启binlog log_bin=master-bin log_bin-index=master-bin.index skip-name-resolve # 设置连接端口 port=3306 # 设置mysql的安装目录 # basedir=/usr/local/mysql # 设置mysql数据库的数据的存放目录 # datadir=/usr/local/mysql/mysql-files # 允许最大连接数 max_connections=200 # 允许连接失败的次数。 max_connect_errors=10 # 服务端使用的字符集默认为UTF8 character-set-server=utf8 # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB # 默认使用“mysql_native_password”插件认证 #mysql_native_password default_authentication_plugin=mysql_native_password
我们首先进入到宿主机**/usr/software/docker_dir/mysql8.0.20_1/mysql** 目录下:
我们来修改my.cnf文件,再原来的配置文件后追加上面的内容:
vim my.cnf
docker restart mysql_1
然后,我们需要给root用户分配一个replication slave的权限。
#登录主数据库 mysql -u root -p GRANT REPLICATION SLAVE ON *.* TO 'root'@'%'; flush privileges; #查看主节点同步状态: show master status;