下载mysql
根据需要指定版本
docker image pull mysql:5.7.29
查看镜像
docker images
创建容器
docker run -d -p 3306:3306 -v /docker/mysql/conf/my.cnf:/etc/my.cnf -v /docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mymysql mysql:5.7.29 --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci
run run 是运行一个容器
-d 表示后台运行
-p 表示容器内部端口和服务器端口映射关联
--privileged=true 设值MySQL 的root用户权限, 否则外部不能使用root用户登陆
-v /docker/mysql/conf/my.cnf:/etc/my.cnf 将服务器中的my.cnf配置映射到docker中的/docker/mysql/conf/my.cnf配置
-v /docker/mysql/data:/var/lib/mysql 同上,映射数据库的数据目录, 避免以后docker删除重新运行MySQL容器时数据丢失
-e MYSQL_ROOT_PASSWORD=123456 设置MySQL数据库root用户的密码
--name mysql 设值容器名称为mysql
mysql:5.7 表示从docker镜像mysql:5.7中启动一个容器
--character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci 设值数据库默认编码
可能会出现端口冲突
docker: Error response from daemon: driver failed programming external connectivity on endpoint mymysql (bda637da1d921634c102c399af1e77658a0ef2f77a5200a630957de38d9ca59e): Error starting userland proxy: listen tcp4 0.0.0.0:3306: bind: address already in use.
查看端口
netstat -tanlp
杀死相关的进程
kill 886
名字冲突 更换一个容器的名字
docker: Error response from daemon: Conflict. The container name "/mymysql" is already in use by container "4336c6c06a85c7210fe75910be1060a2fa66a88ca2d9a34958d3f4f9e89eade3". You have to remove (or rename) that container to be able to reuse that name.
进入容器
docker exec -it mymysql bash
mysql -uroot -p
使用命令查看root用户是否开启远程权限弄
use mysql;
select User,authentication_string,Host from user;
host显示%则代表开启了远程连接
远程连接
如果是使用云服务记得要开器3306端口
开启canal
查看
show variables like 'log_bin';
on表示开启,off标识没有开启
开启canal
在我们刚才设置的挂载my.cnf文件中添加下面的内容。这里要记住重新启动这个mysql服务。
[mysqld]
#binlog文件名
log-bin=mysql-bin
#选择row模式
binlog_format=ROW
#mysql实例id,不能和canal的serverId重复
server-id=1
设置同步用户canal
grant SELECT, REPLICATION SLAVE, REPLICATION CLIENT on *.* to 'canal'@'%' identified by "canal";
flush privileges;
安装canal
这里演示的是最新版的
docker pull canal/canal-server
在本地创建存放配置文件的地址
mkdir canal
touch canal.properties
touch instance.properties
cp容器中的文件
docker cp canal:/home/admin/canal-server/conf/example/instance.properties /docker/canal/instance.properties
docker cp canal:/home/admin/canal-server/conf/canal.properties /docker/canal/canal.properties
创建容器
docker run --name canal -p 11111:11111 -d
-v /docker/canal/instance.properties:/home/admin/canal-server/conf/example/instance.properties
-v /docker/canal/canal.properties:/home/admin/canal-server/conf/canal.properties canal/canal-server
修改instance文件
# position info 修改Linux中的数据库地址
canal.instance.master.address=147.95.115.74:3306
# username/password 指定可访问用户名和密码
canal.instance.dbUsername=canal
canal.instance.dbPassword=canal
# table regex 数据同步的规则这里写的是所有的数据库所有的表
canal.instance.filter.regex=.*\\..*
匹配