Mysql won't start - ibdata1 corrupt? - operating system error number 13 - permissions issue

前端 未结 14 1672
粉色の甜心
粉色の甜心 2020-12-05 02:29

Server shutdown from power failure.
Mysql will not start now.
Disk is not full. Syslog is below

Oct 11 15:03:31 joe mysqld_safe[24757]: started
Oct 1         


        
相关标签:
14条回答
  • 2020-12-05 03:07

    When this popped up for me, I found the answer in the /etc/mysql/my.cnf configuration file. The datadir line did not point to the /var/lib/mysql directory (where the databases are). Once I put this path in, the server restarted no problem.

    0 讨论(0)
  • 2020-12-05 03:09

    I had the same problem and fix by below steps

    Working directory /var/lib/mysql

    Earlier /var/lib/mysql was owned by some unknown user

    Changed it to mysql

    mysql]# chown -R mysql:mysql *

    mysql]# service mariadb start

    Redirecting to /bin/systemctl start mariadb.service

    Works like a charm

    0 讨论(0)
  • 2020-12-05 03:09

    If you use SEL Linux

    Intall semanage

    yum whatprovides /usr/sbin/semanage you get policycoreutils-python-2.5-22.el7.x86_64

    See mysqld security context

    After installation yum install policycoreutils-python you can just look what different security context mysqld has.

    semanage fcontext -l | grep mysqld
    /etc/mysql(/.*)?                       all files    system_u:object_r:mysqld_etc_t:s0
    /etc/my\.cnf\.d(/.*)?                  all files    system_u:object_r:mysqld_etc_t:s0
    /var/log/mysql.*                       regular file system_u:object_r:mysqld_log_t:s0
    /var/lib/mysql(-files|-keyring)?(/.*)? all files    system_u:object_r:mysqld_db_t:s0
    /var/run/mysqld(/.*)?                  all files    system_u:object_r:mysqld_var_run_t:s0
    /var/log/mariadb(/.*)?                 all file     system_u:object_r:mysqld_log_t:s0
    /var/run/mariadb(/.*)?                 all files    system_u:object_r:mysqld_var_run_t:s0
    /usr/sbin/mysqld(-max)?                regular file system_u:object_r:mysqld_exec_t:s0
    /var/run/mysqld/mysqlmanager.*         regular file system_u:object_r:mysqlmanagerd_var_run_t:s0
    /usr/lib/systemd/system/mysqld.*       regular file system_u:object_r:mysqld_unit_file_t:s0
    /usr/lib/systemd/system/mariadb.*      regular file system_u:object_r:mysqld_unit_file_t:s0
    /etc/my\.cnf                           regular file system_u:object_r:mysqld_etc_t:s0
    /root/\.my\.cnf                        regular file system_u:object_r:mysqld_home_t:s0
    /usr/sbin/ndbd                         regular file system_u:object_r:mysqld_exec_t:s0
    /usr/libexec/mysqld                    regular file system_u:object_r:mysqld_exec_t:s0
    /usr/bin/mysqld_safe                   regular file system_u:object_r:mysqld_safe_exec_t:s0
    /usr/bin/mysql_upgrade                 regular file system_u:object_r:mysqld_exec_t:s0
    /etc/rc\.d/init\.d/mysqld              regular file system_u:object_r:mysqld_initrc_exec_t:s0
    /var/lib/mysql/mysql\.sock             socket       system_u:object_r:mysqld_var_run_t:s0
    /usr/libexec/mysqld_safe-scl-helper    regular file system_u:object_r:mysqld_safe_exec_t:s0
    /home/[^/]+/\.my\.cnf                  regular file unconfined_u:object_r:mysqld_home_t:s0
    

    Here you see all context for mysqld a short list with explanation

    1. mysqld_etc_t - config files
    2. mysqld_db_t - data db files
    3. mysqld_log_t - log files
    4. mysqld_exec_t - execution files

    So if you have the wrong security context on your files you get a permission denied (error 13)

    Solution

    chcon -R -u system_u -t mysqld_db_t  /var/lib/mysql
    

    But check the "normal" permissions, too. I had this problem with centos. You have to systemctl restart mysql for the changes.

    0 讨论(0)
  • 2020-12-05 03:12

    I had exactly the same problem on my CentOS box. After moving mysql data directory around I couldn't start the service anymore, even as I had copied the files with the same owner and permissions.

    I had a problem with the SELinux security context. If you run your CentOS stock it has good chance to be enabled and won't let do what you want with MySQL. To fix this :

    First compare the old dir and new dir using

    ls -Z /var/lib/mysql 
    

    and

    ls -Z /new/mysql/dir
    

    If you see any difference it's likely to be your problem. To modify this :

    chcon -R --type=mysql_db_t /new/mysql/dir
    

    The -R switch is for recursion. If you only need to change one file you can omit it. If your context is different than mine(maybe a different distro), use the one indicated by the output of the first (it should be the 3rd field of the SELinux stuff)

    ls -Z /var/lib/mysql 
    
    0 讨论(0)
  • 2020-12-05 03:14

    In my siuation is Selinux's problem. And the
    chcon -R --type=mysql_db_t /new/mysql/dir comes error:
    chcon: failed to change context of /new/mysql/dir to root:object_r:mysql_db_t: Invalid argument.
    So i use the command:chcon -R root:object_r:mysqld_db_t /new/mysql/dir.

    0 讨论(0)
  • 2020-12-05 03:15

    For me, restoring the security context (selinux) did the trick

    restorecon -R /var/lib/mysql/

    0 讨论(0)
提交回复
热议问题