美文网首页
制作轻量级的mysql镜像

制作轻量级的mysql镜像

作者: KS保 | 来源:发表于2020-09-15 11:22 被阅读0次

    一、拉取一个mysql5.5镜像

    docker pull mysql:5.5

    二、通过镜像启动一个容器,并在容器中安装ps命令,安装前需要更新apt-get

    docker run ‐di -p 3306:3306 --name mysqldocker -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.5

    因为原生的mysql:5.5镜像里面很干净,里面的apt-get工具也是老版的,所以进入容器后得先更新apt-get,再安装ps

    apt-get update  && apt-get install procps

    根据自己的需要修改mysql配置文件/etc/mysql/my.cnf,下面是我的配置

    [mysqld]

    datadir=/var/lib/mysql

    general_log=on

    general_log_file=/var/log/mysql/general.log

    socket=/var/lib/mysql/mysql.sock

    symbolic-links=0

    pid-file=/var/run/mysqld/mysqld.pid

    !includedir /etc/mysql/conf.d/

    查看配置文件中的文件或文件夹是否存在,没有的话记得去创建

    创建文件/var/log/mysql/general.log并给予权限chown -R mysql:mysql /var/log/mysql -> cd mysql -> touch general.log -> chmod +x general.log

    建立一个软链接 ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock (一定得建立这个软链接,不然后面进入数据库时会报错)

    三、退出容器,并使用此容器生成一个镜像

    docker commit -m 'mysql5.5' -a 'ha' mysqldocker mysql5.5:part1

    四、用上面生成的新的镜像来开启一个新的容器,后面加上/bin/bash

    docker run -dit --privileged=true --name=testmysql mysql:part1 /bin/bash

    进入testmysql容器中,ps查看mysql进程,没有自动启动,此时使用启动mysql的原始命令mysqld --user root

    mysqld --user root 

    输入该命令后报错:[ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it

    此时运行命令mysql_install_db --user=mysql

    输入该命令后报错:

    FATAL ERROR: Could not find ./bin/my_print_defaults

    If you compiled from source, you need to run 'make install' to

    copy the software into the correct location ready for operation.

    If you are using a binary release, you must either be at the top

    level of the extracted archive, or pass the --basedir option

    pointing to that location.

    按照错误提示,去mysql安装目录的bin目录下查找是否有my_print_defaults, 本镜像mysql的安装目录为/usr/local/mysql,进到bin文件夹下查看是否有my_print_defaults,发现是有的;再回过头看报错信息,注意到那个路径是相对路径,是以mysql的安装目录为起始的,而初始化则是进去初始化脚本目录里运行脚本;所以回到安装目录以相对路径去执行初始化脚本

    cd /usr/local/mysql

    ./scripts/mysql_install_db --user=mysql

    再重新执行一遍mysqld --user root,发现mysql已经成功启动


    但在容器中执行mysql -u root -p123456是发现报错:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password:YES)

    这是因为数据库里面user表中的用户密码被置空了,具体什么原因正在了解

    此时需要修改my.cnf配置文件,添加skip-grant-tables,重新启动mysql,然后无密码进入数据库中

    执行:update mysql.user set password=PASSWORD("123456") where user="root"

    如果需要允许外部主机访问本数据库,则还需要在user表中添加一条记录:insert into user(host,user,password) values("%","root",PASSWORD("123456"));

    刷新:flush privileges;

    退出并重启数据库

    五、将testmysql容器制作成最终的镜像

    docker commit -m 'mysql5.5' -a 'ha' testmysql mysql5.5:part2

    相关文章

      网友评论

          本文标题:制作轻量级的mysql镜像

          本文链接:https://www.haomeiwen.com/subject/ienxyktx.html