2020/06/05

MySQL reset password for user

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'bla'

For mysql 8.0.12+

PASSWORD() is deprecated, SET PASSWORD is disabled, ALTER USER is disabled as well.
1. stop mysql service
2. Start it this way: /usr/local/mysql/bin/mysqld_safe --skip-grant-tables
3. Login (mysql) and exec: update user set authentication_string='' where
User='root'; 4. killall mysqld
5. Start service again

2019/03/04

See what is happening in process that "eating" resource

To see what process is eating my server resource, use following command:

$ top 

Then use command:

$ strace -p <process id>

2018/02/03

MAMP Pro-г зүй бус унтрааснаас болж MySQL эвдрэх

Mamp PRO ашиглах явцад компьютерийн цэнэг дуусах, мэтээр сервисийг зогсоолгүйгээр унтрааснаас болж дараа нь MySQL-ийн ямар нэг хүснэгтийн файлд эвдрэл гарч, сервис эхлэхгүй алдаа гарах тохиолдолд гардаг. Алдааны логийг уншихад:

2018-02-03 22:50:43 1754 [ERROR] InnoDB: Attempted to open a previously opened tablespace. Previous tablespace cms_db/auth uses space ID: 1 at filepath: ./green_cms_db/auth.ibd. Cannot open tablespace mysql/innodb_table_stats which uses space ID: 1 at filepath: ./mysql/innodb_table_stats.ibd
2018-02-03 22:50:43 7fffb2fdb3c0 InnoDB: Operating system error number 2 in a file operation.
InnoDB: The error means the system cannot find the path specified.
InnoDB: If you are installing InnoDB, remember that you must create
InnoDB: directories yourself, InnoDB does not create them.
InnoDB: Error: could not open single-table tablespace file ./mysql/innodb_table_stats.ibd
InnoDB: We do not continue the crash recovery, because the table may become
InnoDB: corrupt if we cannot apply the log records in the InnoDB log to it.
InnoDB: To fix the problem and start mysqld:
InnoDB: 1) If there is a permission problem in the file and mysqld cannot
InnoDB: open the file, you should modify the permissions.
InnoDB: 2) If the table is not needed, or you can restore it from a backup,
InnoDB: then you can remove the .ibd file, and InnoDB will do a normal
InnoDB: crash recovery and ignore that table.
InnoDB: 3) If the file system or the disk is broken, and you cannot remove
InnoDB: the .ibd file, you can set innodb_force_recovery > 0 in my.cnf
InnoDB: and force InnoDB to continue crash recovery here.
180203 22:50:43 mysqld_safe mysqld from pid file /Applications/MAMP/tmp/mysql/mysql.pid ended
180203 23:26:39 mysqld_safe Logging to '/Applications/MAMP/logs/mysql_error.log'.

гэсэн мэдээлэл бичигдсэн байв. Нэгэн ачтай буянтай хүн дараах зааврыг бэлдсэн байсныг олж үзээд дагаж хийснээр асуудлаас ангижрав бололтой.

1. Stop servers in MAMP
2. Navigate to the .idb files for your WP DB - if using MAMP, should be somewhere like ~/Library/Application Support/appsolute/MAMP PRO/db/mysql56/[yourdbname]/
Add .bk (or any unrecognizable extension) to the end of the .idb filenames
3. Create a temporary folder somewhere handy; select all the .idb files and move them into that folder.
4. Stop servers in MAMP
5. Drop the .bk (or whatever you used) from the .idb file names
6. Move the files back into the original folder from Step 2.

2017/04/06

Symfony 1.4-ийг composer package ашиглах боломжтой болгох

Symfony lib-ийн lib/autoload/sfAutoloadAgain.class.php-ийн 72-р мөрөнд дараах кодыг өөрчилж оруулснаар сүүлийн үеийн composer-ээр суудаг package-үүдийг load хийж болж байна.

if (is_array($autoload) && $this === $autoload[0])

Doctrine form ашиглалгүйгээр file upload хийх

<?php
foreach ($request->getFiles() as $fileName) {

            $fileSize = $fileName['size'];
            $fileType = $fileName['type'];
            $theFileName = $fileName['name'];
            $uploadDir = sfConfig::get("sf_upload_dir");
            $Contacts_uploads = $uploadDir.'/contacts_uploads';

            if(!is_dir($Contacts_uploads))
                mkdir($Contacts_uploads, 0777);            

            move_uploaded_file($fileName['tmp_name'], "$Contacts_uploads/$theFileName");

        }
?>

2017/01/23

Cron log бүртгэл үүсэхээр тохируулах

/etc/rsyslog.d/50-default.conf файлыг нээж cron.*-ийн өмнөх # тэмдэгийг арилгаад хадгална.

sudo service rsyslog restart
service cron restart

командуудыг өгсний дараа /var/log/cron.log файлаас cron-ы лог бүртгэлийг харж болно.

2017/01/04

Detecting & clearing INODE junks

Ubuntu серверийн маань Inode хязгаар дүүрээд серверт ямарч шинэ файл үүсэх боломжгүй болох алдаа тохиолдоод ухаж үзэв.

$ df -i 

командаар шалгахад 100 хувь дүүрсэн үзүүлэлт харуулав.

Шалтгааныг хайж хаана тэр олон файл үүсээд байна вэ гэсэн асуудлыг мөшгөвөл

$ for i in /*; do echo $i; find $i |wc -l; done

Командаар аль фолдерт хэт олон файл үүссэн байгааг харах боломжтой.

Сэжиг төрсөн фолдер ажиглагдвал

$ for i in /home/*; do echo $i; find $i |wc -l; done

Энэ командаар дэд фолдеруудынх нь файлын тоог нарийвчилж шинжилж болно.

Миний тохиолдолд /var/lib/php5 хавтсанд хэт олон тооны session файл үүссэн байсныг

$ cd /var/lib/php5
$ find . -name "sess_*" -print | xargs rm -v

командаар устгав

2015/10/09

Big integer add, multiply operations in C++

64 бит хэмжээнээс хэтрэх, натурал тоонуудыг нэмэх, үржих үйлдлүүдийг C++ дээр бичив. Жишээ кодонд тооны факториал олох програмыг хавсаргав.

#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <cstring>
using namespace std;
int n, s;

string add(string a, string b){
    reverse(a.begin(), a.end());
    reverse(b.begin(), b.end());
    //cout << a << " + " << b << endl;
    string sum = "";
    int a_len = a.length();
    int b_len = b.length();
    int max_len = max(a_len, b_len);
    int carry = 0;
    //cout << a << endl << b << endl;
    for(int k = 0; k < max_len ; k++){
        int digit_a = (k < a_len ? a[k] - '0' : 0);
        int digit_b = (k < b_len ? b[k] - '0' : 0);
        sum += ((digit_a + digit_b + carry) % 10) + '0';
        carry = (digit_a + digit_b + carry) / 10;
        
    }
    if(carry) sum += "1";
    //cout << sum << endl;
    reverse(sum.begin(), sum.end());
    return sum.length() == 0 ? "0" : sum;
}
string multiply(string a, string b){
    reverse(a.begin(), a.end());
    reverse(b.begin(), b.end());
    string product = "";
    int a_len = a.length();
    int b_len = b.length();
    int max_len = max(a_len, b_len);
    
    string offset = "";
    for(int i = 0; i < a_len; i++){
        int carry = 0;
        string temp_product = offset;
        for(int j = 0; j < b_len; j++){
            temp_product += (a[i]-'0')*(b[j]-'0')%10 + carry + '0';
            carry = (a[i]-'0')*(b[j]-'0')/10;
        }
        if(carry) temp_product += carry + '0';
        
        reverse(temp_product.begin(), temp_product.end());
        product = add(product, temp_product);
        offset += "0";
    }
   
    return product[0] != '0' ? product : "0";
}
int main(){
    string result = "1";
    cin >> n;
    for(int i = 1; i <= n; i++ ){
        result = multiply(result, to_string(i));
    }
    cout << result << endl;
    return 0;
}