3.5.2.3 Verify All Cluster Process PID Files

  1. You must verify that each process in the wild cluster has a valid PID file. For purposes of this discussion, a valid PID file has the following characteristics:

    • The filename is ndb_node_id.pid, where node_id is the node ID used for this process.

    • The file is located in the data directory used by this process.

    • The first line of the file contains the process ID, and only the process ID.

    To check the PID file for the management node process, log into the system shell on host alpha, and change to the management node's data directory. If this is not specified, the PID file should be created in the same directory that ndb_mgmd runs in; change to this directory instead. Then check to see whether the PID file is present using your system's tools for doing this. On Linux, you can use the command shown here:

    $> ls ndb_1*
    ndb_1_cluster.log  ndb_1_out.log  ndb_1.pid

    Check the content of the matching .pid file using a pager or text editor. We use more for this purpose here:

    $> more ndb_1.pid
    17066

    The number shown should match the ndb_mgmd process ID. We can check this on Linux as before, using ps:

    $> ps -ef | grep ndb_mgmd
    jon    17066  1  1 19:16 ?      00:00:01 ./ndb_mgmd -f /etc/mysql-cluster/config.ini --config-cache=false
    jon    17942  1819  0 19:17 pts/2  00:00:00 grep --color=auto ndb_mgmd

    The management node PID file satisfies the requirements listed at the beginning of this section. Next, we check the PID files for the data nodes, on hosts beta and gamma. Log into a system shell on beta, then obtain the process ID of the ndbd process on this host, as shown here:

    $> ps -ef | grep ndbd
    jon    2024     1  1 18:46 ?        00:00:01 ./ndbd -c alpha
    jon    2150  1819  0 18:47 pts/2    00:00:00 grep --color=auto ndbd

    We observed earlier (see Section 3.5.2.1, “Creating and Configuring the Target Cluster”) that this node's node ID is 5 and that its DataDir is /var/lib/mysql-cluster. Check in this directory for the presence of a file named ndb_5.pid:

    $> ls /var/lib/mysql-cluster/ndb_5.pid
    ndb_5.pid

    Now check the content of this file and make certain that it contains the process ID 2024 on the first line and no other content, like this:

    $> more /var/lib/mysql-cluster/ndb_5.pid
    2024

    Similarly, we locate and check the content of the PID file for the remaining data node (node ID 6, data directory /var/lib/mysql-cluster/) on host gamma:

    $> ps -ef | grep ndbd
    jon    2067     1  1 18:46 ?        00:00:01 ./ndbd -c alpha
    jon    2150  1819  0 18:47 pts/2    00:00:00 grep --color=auto ndbd
    
    $> ls /var/lib/mysql-cluster/ndb_6.pid
    ndb_6.pid
    
    $> more /var/lib/mysql-cluster/ndb_6.pid
    2067

    The PID file for this data node also meets our requirements, so we are now ready to proceed to the mysqld binary running on host delta. We handle the PID file for this process in the next step.

  2. If a given process does not have a valid PID file, you must create one for it, or, in some cases, modify the existing one. This is most likely to be a concern when checking PID files for mysqld processes, due to the fact that the MySQL Server is customarily started using the startup script mysqld_safe, which can start the mysqld binary with any number of default options, including the --pid-file option. We see that is the case when we check on host delta for the running mysqld process there (emphasized text):

    $> ps -ef | grep mysqld
    jon   8782  8520  0 10:30 pts/3  00:00:00 /bin/sh ./mysqld_safe --ndbcluster
    --ndb-connectstring=alpha
    jon   8893  8782  1 10:30 pts/3  00:00:00 /usr/local/mysql/bin/mysqld
    --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
    --plugin-dir=/usr/local/mysql/lib/plugin --ndbcluster --ndb-connectstring=alpha
    --log-error=/usr/local/mysql/data/delta.err --pid-file=/usr/local/mysql/data/delta.pid
    jon       8947  8520  0 10:30 pts/3    00:00:00 grep --color=auto mysqld
    
    $> more /usr/local/mysql/data/delta.pid
    8893

    The PID for the SQL node is in an acceptable location (the data directory) and has the correct content, but has the wrong name.

    You can create a correct PID file in either of two locations—in the process data directory, or in the directory mcm_dir/clusters/cluster name/pid/ on the same host as the process, where mcm_dir is the MySQL Cluster Manager installation directory, and cluster_name is the name of the cluster. In this case, since the existing PID file is otherwise correct, it is probably easiest just to copy it to a correctly named file in the same directory incorporating the node ID (100), like this:

    $> cp /usr/local/mysql/data/delta.pid /usr/local/mysql/data/ndb_100.pid

    Another alternative is to create and write a completely new PID file to the proper location in the MySQL Cluster Manager installation directory, as shown here:

    $> echo '8893' > /opt/mcm-1.3.6/clusters/newcluster/pid/ndb_100.pid
    
    $> more /opt/mcm-1.3.6/clusters/newcluster/pid/ndb_100.pid
    8893

    ndbapi processes running under MySQL Cluster Manager do not require PID files, so we have completed this step of the import, and we should be ready for a test or dry run of the migration. We perform this test in the next step.