mysql

37 0 0 0

安装

采用docker安装方式

  1. 下载镜像
docker pull mysql:5.7.33
  1. 建立映射目录
mkdir /home/mysql
  1. 运行mysql
docker run -p 3306:3306 --name mysql -v /home/mysql/conf:/etc/mysql -v /home/mysql/logs:/var/log/mysql -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.33

启动binlog

连接mysql查询是否启动binlog,执行sql:

show variables like '%log_bin%'

log_bin的值:OFF表示关,ON表示开

如果没开按照以下流程开启binlog

  1. 进入挂载目录conf
cd /home/mysql/conf
  1. 修改目录下my.cnf文件,如果没有用vi新建(在window新建可能出现编码问题)
[mysqld]
log-bin=/var/log/mysql/mysql-bin
binlog_format=ROW
server-id=123454

如果是新建的必须要加上[mysqld] log-bin的值是生成binlog目录,路径最后面的mysql-bin是生成的文件名,MySQL会自动在文件名后面加后缀,/var/log/mysql这个目录要设置成容器里面的路径,不是宿主机,不是宿主机,不是宿主机 binlog_format有三种不同模式:Mixed,Statement,Row我们用Row详情 server-id集群id随便写

  1. 重启mysql
docker restart mysql
  1. 如果重启报错,查询报错日志,可能是没权限,mysql下问价加权限即可
chmod -R 764 *
  1. 执行sql查看是否开启成功
show variables like '%log_bin%'

安装canal

  1. 下载镜像
docker pull canal/canal-server
  1. 启动镜像,把配置文件复制出来
docker run -d --name canal-server -p 11111:11111 canal/canal-server
  1. 新建目录
mkdir /home/canal/conf
mkdir /home/canal/logs
  1. 复制配置文件
docker cp canal-server:/home/admin/canal-server/conf /home/canal/
  1. 修改配置文件/home/canal/conf/example/instance.properties
# 数据库连接信息
canal.instance.master.address=127.0.0.1:3306
canal.instance.dbUsername=canal
canal.instance.dbPassword=canal
# 监听表
canal.instance.filter.regex=blog_tag,ppt_tag
# mq的topic
canal.mq.topic=mysql
  1. 修改/home/canal/conf/canal.properties
# tcp, kafka, RocketMQ
canal.serverMode = kafka
canal.zkServers =note01:2181,note02:2181,note03:2181
canal.mq.servers = note01:9092,note02:9092,note03:9092
  1. mysql新增用户
CREATE USER canal IDENTIFIED BY 'canal';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
FLUSH PRIVILEGES;
  1. 删除canal
docker rm -f canal-server
  1. 启动canal
docker run -d --name canal-server -v /home/canal/conf:/home/admin/canal-server/conf -v /home/canal/logs:/home/admin/canal-server/logs -p 11111:11111 canal/canal-server

遇到问题

启动报没权限错误

删除容器,启动的时候加参数 --privileged=true

常用sql

创建用户

CREATE USER 用户名 IDENTIFIED BY '密码';

授权

命令:

GRANT privileges ON databasename.tablename TO 'username'@'host'
  • privileges:用户的操作权限,如SELECT,INSERT,UPDATE等,如果要授予所的权限则使用ALL
  • databasename:数据库名
  • tablename:表名,如果要授予该用户对所有数据库和表的相应操作权限则可用表示,如.*
  • host:表示本地用户,若给远程用户授权使用 %

示例:

GRANT ALL ON *.* TO 'hk'@'%';

撤销用户权限

命令:

REVOKE privilege ON databasename.tablename FROM 'username'@'host';

删除用户

DROP USER 'username'@'host';

查看所有用户

SELECT * FROM mysql.user;
目录